اذهب إلى المحتوى

محمد أبو عواد

الأعضاء
  • المساهمات

    6234
  • تاريخ الانضمام

  • تاريخ آخر زيارة

  • عدد الأيام التي تصدر بها

    95

كل منشورات العضو محمد أبو عواد

  1. يمكنك تجربة تسطيح الصفيف (flatten) كالتالي باستخدام الدالة ()flat كالتالي const authorPaths = authors.items.map(item => { return {params: {blog_post: ['author', item.fields.slug]}} }).flat()
  2. يمكنك فعل التالي module.exports = withCSS(withFonts(withSass( withImages({ distDir: '../_next', webpack(config) { return config; } }) ))) يمكنك محاولة استخدام next-compose, تساعدك بتكوين ملف next.config.js بطريقة بسيطة , يمكنك تثبيتها باستخدام الامر التالي npm install -D next-compose أما عن استخدامها فهي بهذا الشكل, مثال بسيط مع حزم TypeScript و Sass: const withTS = require('@zeit/next-typescript') const withSass = require('@zeit/next-sass') const compose = require('next-compose') const tsConfig = {/** ts config here */} const sassConfig = {/** sass config here */} module.exports = compose([ [withTS, tsConfig], [withSass, sassConfig], { webpack: (config) => { /**some special code */ return config } } ]) مثال على إنشاء vendor.css و app.css من ملحقات إدخال مختلفة: const withLess = require('@zeit/next-less') const withSass = require('@zeit/next-sass') const ExtractTextPlugin = require('extract-text-webpack-plugin') const commonsChunkConfig = require('@zeit/next-css/commons-chunk-config') const compose = require('./scripts/next-compose')} const extractVendorCSSPlugin = new ExtractTextPlugin('static/vendor.css') const extractAppCSSPlugin = new ExtractTextPlugin('static/app.css') module.exports = compose([ [withLess, { cssLoaderOptions: { modules: false }, lessLoaderOptions: { /** less loader options */ }, extractCSSPlugin: extractVendorCSSPlugin }], [withSass, { cssLoaderOptions: { modules: true, localIdentName: '[local]-[hash:base64:5]', }, sassLoaderOptions: { /** sass loader options */ }, extractCSSPlugin: extractAppCSSPlugin, }], { webpack(config, options) { config.plugins.push(extractVendorCSSPlugin) config.plugins.push(extractAppCSSPlugin) if (!options.isServer) { config = commonsChunkConfig(config, /\.(less|scss|sass)$/) } return config } } ])
  3. المشكلة أنك تحاول اعطاء خاصية unsigned لعمود من نوع سلسلة نصية, وهذا غير منطقي, الخطأ بالتحديد في هذا السطر $table->string('country_id')->nullable()->unsigned(); الخاصية unsigned هو قيد على قيمة العمود بأنه لا يمكن أن تكون قيمة سالبة, ويجب ان يكون نوع العمود رقم, ولذلك يعطيك هذا الخطأ, حاول تعديل السطر ليكون كالتالي $table->string('country_id')->nullable(); أو يمكنك تحويل نوع العمود الى integer , بناء على اسم الحقل country_id فهو يجب أن يكون من نوع intger فيكون شكل الكود كالتالي $table->integer('country_id')->nullable()->unsigned(); ثم نفذ الامر مرة أخرى
  4. هل يمكنك تصوير الخطأ الذي يظهر لديك؟ أو نسخه ولصقه لكي نساعدك بشكل جيد, لأننا لا نستطيع معرفة الخطأ فقط من الكود
  5. إليك طريقة أخرى باستخدام طريقة النموذج (model method). يمكنك باستخدام هذه الطريقة أن تتخطى الحقول الفارغة ويتيح لك استبعاد حقول محددة. def get_all_fields(self): """Returns a list of all field names on the instance.""" fields = [] for f in self._meta.fields: fname = f.name get_choice = 'get_'+fname+'_display' if hasattr(self, get_choice): value = getattr(self, get_choice)() else: try: value = getattr(self, fname) except AttributeError: value = None # اعرض فقط الحقول ذات القيم وتخطي بعض الحقول if f.editable and value and f.name not in ('id', 'status', 'workshop', 'user', 'complete') : fields.append( { 'label':f.verbose_name, 'name':f.name, 'value':value, } ) return fields ثم في القالب الخاص بك: {% for f in app.get_all_fields %} <dt>{{f.label|capfirst}}</dt> <dd> {{f.value|escape|urlize|linebreaks}} </dd> {% endfor %}
  6. للحصول على حل يعمل أيضا حتى عندما يكون لديك UUIDField كمفتاح أساسي يمكنك توصيل إشارة post_save من Django. أضف الكود التالي إلى models.py: from django.db.models.signals import post_save from django.dispatch import receiver @receiver(post_save, sender=MyModel) def mymodel_saved(sender, instance, created, **kwargs): if created: # قم بعمل إضافي في المثال الخاص بك ، على سبيل المثال # instance.generate_avatar()=> عمل # instance.send_email_notification()=> إرسال إشعار البريد الإلكتروني pass سيؤدي رد الاتصال هذا إلى حظر طريقة الحفظ ، بحيث يمكنك القيام بأشياء مثل تشغيل الإشعارات أو تحديث النموذج بشكل أكبر قبل إرسال الرد، سواء كنت تستخدم النماذج أو إطار عمل Django REST لطلبات AJAX.
  7. إذا كنت تستخدم معالج السياق "request" وقمت بتثبيت البرنامج الوسيط site فإنك تستطيع فعل ذلك في ملف الاعدادات INSTALLED_APPS = [ ... "django.contrib.sites", ... ] MIDDLEWARE = [ ... "django.contrib.sites.middleware.CurrentSiteMiddleware", ... ] الآن سيكون لديك كائن request متاحا في القوالب ويمكنك استخدامه، وأيضا سيحتوي على مرجع للموقع الحالي, يمكنك الحصول على domain في القالب باستخدام {{request.site.domain}} كما يمكنك الحصول على اسم الموقع كالتالي {{request.site.name}}
  8. استخدم أداة تحميل Next.js CSS بدلا من @zeit/next-sass, يمكنك الالتزام بالخطوات التالية لفعل ذلك استبدل حزمة @zeit/next-sass بـ sass. قم بإزالة next.config.js. أو لا تغير محمل CSS الموجود بداخله. انقل CSS العام كما هو مقترح في رسالة الخطأ. من بداية Next.js 9.2 يجب استيراد css-global في مكون <App> مخصص كالتالي import '../global-styles/main.scss' export default function MyApp({ Component, pageProps }) { return <Component {...pageProps} /> }
  9. من الخطأ الواضح أن لا يستطيع معالجة الأيقونات, وهذا خطأ اما ناتج عن كتابة صيغ الأيقونات بطريقة خاطئة, أو أنه لا يوجد حزمة لمعالجة الأيقونات, يمكننا استخدام حزمة file-loader لمعالجة الأيقونات, يمكنك تثبيتها كالتالي npm i file-loader --save-dev اذا استمرت المشكلة, تكون بسبب كتابة كود المعالجة بطريقة خاطئة, يمكنك استخدام الكود التالي test: /\.woff(2)?(\?v=[0-9]\.[0-9]\.[0-9])?$/, include: path.resolve(__dirname, './node_modules/bootstrap-icons/font/fonts'), use: { loader: 'file-loader', options: { name: '[name].[ext]', outputPath: 'webfonts', publicPath: '../webfonts', }, }
  10. بالإضافة الى اجابة حسان, إذا كنت تريد تجزئة أسماء الفئات فقط في وضع production، فيمكنك استخدام process.env.NODE_ENV مع عبارة if. كالتالي module.exports = { webpack(config, { buildId, dev, isServer, defaultLoaders, webpack }) { if (process.env.NODE_ENV === "production") { ... ... return config; } else { return config; } }, };
  11. قم بإرجاعه كما تفعل مع أي رد آخر كالتالي from django.http import HttpResponseForbidden return HttpResponseForbidden()
  12. أنت لا تحتاج الى برمجيات وسيطة "middleware" لتنفيذه لمرة واحدة, تريد تنفيذ التعليمات البرمجية في العناوين ذات المستوى الأعلى الموجودة في الملف urls.py. يتم استيراد هذه الوحدة وتنفيذها مرة واحدة, في ملف urls.py from django.confs.urls.defaults import * from my_app import one_time_startup urlpatterns = ... one_time_startup()
  13. المشكلة لديك في عناوين url ذات التنسيق القديم في ملف urls.py الخاص بك, سوف تجده بهذا الشكل (r'^admin/(.*)', admin.site.root), أنت بحاجة لتغييره ليكون كذلك (r'^admin/', include(admin.site.urls) ),
  14. إذا كانت قاعدة البيانات هي mysql ، فيمكنك القيام بهذان الامران لحل الامر افتح الملف الموجود في المسار التالي mysite/mysite/settings.py يجب أن تحتوي إعدادات قاعدة البيانات الخاصة بك على كائن TEST إضافي كما هو موضح في projectname_test DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'myproject', 'USER': 'chandan', 'PASSWORD': 'root', 'HOST': 'localhost', 'PORT': '3306', 'TEST': { 'NAME': 'myproject_test', }, } } 2- اكتب الأمر التالي باستخدام موجه أوامر mysql أو mysql workbench لمنح جميع الامتيازات للمستخدم المحدد في settings.py. GRANT ALL PRIVILEGES ON myproject_test.* TO 'chandan'@'localhost';
  15. إذا كنت تريد أن تفعل شيئا أكثر تعقيدا مع النص الخاص بك ، يمكنك إنشاء الفلتر الخاص بك والقيام ببعض الأمور قبل إرجاع النص.في ملف Template تستطيع انشاء دالة لفعل ذلك, على فرض اسمها do_something from django import template from django.utils.safestring import mark_safe register = template.Library() @register.filter def do_something(title, content): something = '<h1>%s</h1><p>%s</p>' % (title, content) return mark_safe(something) ثم في ملف القالب الخاص بك تستطيع استدعاء الدالة التي قمت بانشائها والتي اسمها do_something وتمرير النص الذي تريده <body> ... {{ title|do_something:content }} ... </body>
  16. المعلومات الموجودة عن image-webpack-loader مضللة وقليلة نوعا ما. ما يمكنه فعله هو تحسين ملف webp الموجود بالفعل وتقليل حجمه. يمكنك استخدام imagemin-webp لإنشاء صفحات ويب ثم تستطيع استيراد هذه الصفحات إلى ملف ثم تمريره عبر image-webpack-loader و file-loader كالتالي import React from "react"; import waveImgJpg from "Images/common/wave.jpg"; import waveImgWebP from "Images/webp/wave.webp"; import styles from "IndexStyles/mainContent.scss"; export const MainContent = () => { return ( <picture> <source className={styles.waveImg} srcSet={waveImgWebP} type="image/webp" /> <img className={styles.waveImg} src={waveImgJpg} alt="beatiful wave" title="beatiful wave" /> </picture> ); };
  17. يمكنك استخدام العنصر section واعطاء خاصية background-image لهذا العنصر , كود html <section class="header"> ... </section> كود css .header{ background-image: url(تضع مسار الصورة هنا); } بداخل العنصر section تضع باقي مكونات القسم مثل navbar العلوي ثم الشعار ثم العنوان ثم navbar السفلي
  18. بداية لا يمكننا الدخول في أي علم من علوم الحاسوب دون أن يكون لدينا أي معرفة بمكونات الحاسوب او لا نعرف طريقة استخدامه ودون معرفة أنظمة التشغيل والمقصود فيها, وبشكل خاص لا يمكننا تعلم البرمجة دون تعلم قواعد البيانات وما المقصود بها وغيره الكثير من الأشياء المهمة والضرورية قبل البدء في أي مجال من مجالات الحاسوب, لذلك بداية تحتاج لدورة علوم الحاسوب والتي سوف تتعلم فيها جميع الأشياء التي ذكرتها سابقا, بعد ان ننجز دورة علوم الحاسوب نستطيع أن ندخل في دورة تطوير واجهات المستخدم والتي من خلالها سوف نتعلم بناء الجانب الامامي من الموقع, وهو الجانب الذي يراه المستخدم, وهو تصميم الموقع وشكل الخطوط ولونها وحجم الصور وغيرها من التنسيقات, الىن بعد الانتهاء من دورة تطوير واجهات المستخدم نحتاج الى لغة برمجة للتعامل مع قواعد البيانات لتخزين البيانات الخاصة بالموقع فيها, مثل اسم المتسخدم والايميل الخاص به وكلمة السر والصور والمواضيع الموجودة في الموقع, وأيضا عمليات الحذف والاضافة والتعديل على البيانات , وهذا هو الجانب الخلفي من الموقع (باك اند) , يتم من خلال احدى الدورتين : تطوير التطبيقات باستخدام لغة JavaScript أو تطوير تطبيقات الويب باستخدام لغة PHP , يمكنك الاكتفاء بواحدة منهما , اذا الترتيب يكون كالتالي دورة علوم الحاسوب دورة تطوير واجهات المستخدم دورة تطوير تطبيقات الويب باستخدام لغة PHP أو تطوير التطبيقات باستخدام لغة JavaScript
  19. قم بتعطيل المنطقة الزمنية باستخدام السطر التالي challenge.datetime_start.replace(tzinfo=None); يمكنك أيضا استخدام replace(tzinfo=None) لتاريخ ووقت آخر كالتالي if challenge.datetime_start.replace(tzinfo=None) <= datetime.now().replace(tzinfo=None) <= challenge.datetime_end.replace(tzinfo=None):
  20. يمكنك انشاء الkeyframes جميعها , على فرض لدينا عنصر لديه المعرف #test وأريد ان اطبق عليه في كل شاشة انيميشن مختلف, لننشئ الkeyframes في البداية @keyframes slideUp500 { 0% { transform: translate3d(0,500px,0); } 100% { transform: translate3d(0,0,0); } } @keyframes slideUp750 { 0% { transform: translate3d(0,750px,0); } 100% { transform: translate3d(0,0,0); } } لقد قمت بانشاء اثنان من الkeyframes ولكل واحد منهم انميشن خاص, الآن لنطبقهما على العنصر #test في شاشات مختلفة باستخدام الميديا كويري @media(max-width:500px) { #test { animation: slideUp500 1s forwards; } } @media(max-width:750px) { #test { animation: slideUp750 1s forwards; } }
  21. يمكنك استخدام هذا الكود لإضافة placeholder لكل حقل TextInput في النموذج الخاص بك. سيتم أخذ نص placeholder من تسميات الحقول الخاصة بالنموذج الخاص بك class PlaceholderDemoForm(forms.ModelForm): def __init__(self, *args, **kwargs): super(PlaceholderDemoForm, self).__init__(*args, **kwargs) for field_name in self.fields: field = self.fields.get(field_name) if field: if type(field.widget) in (forms.TextInput, forms.DateInput): field.widget = forms.TextInput(attrs={'placeholder': field.label}) class Meta: model = DemoModel
  22. يمكنك استخدام الدالة count() التي تقوم بإرجاع عدد النتائج المسترجعة, اذا كانت تساوي صفر فلا يوجد أي نتائج والعكس صحيح if users.count() == 0: # غير موجود else: # موجود
  23. يمكنك عمل دالة بداخل الدالة لفعل ذلك, وظيفة الدالة أن تحصل على جميع الحقول باستخدام الدالة get_all_field_names ثم عمل حلقة تكرار على جميع الحقول كالتالي def __iter__(self): for field_name in self._meta.get_all_field_names(): value = getattr(self, field_name, None) yield (field_name, value) أو يمكنك استخدام الطريقة التالية, وهي استخدام __dict__ , الطريقة تعتمد على اذا كنت تستخدم الصنف نفسه أم كائن من الصنف, افترض لدينا الصنف User ,اذا كنت تستخدم كائن منه على سبيل المثال instance = User.objects.get(username="foo") instance.__dict__ #يقوم بإرجاع قاموس بكل الحقول وقيمها instance.__dict__.keys() # يقوم بإرجاع قاموس بجميع الحقول list(instance.__dict__.keys()) # إرجاع قائمة مع جميع الحقول أما اذا كنت تستخدم الصنف نفسه, User._meta.__dict__.get("fields") # إرجاع الحقول # للحصول على أسماء الحقول ، يمكنك عمل حلقة تكرار واستدعاء __str __ () for field in User._meta.__dict__.get("fields"): field.__str__()
  24. يمكنك استخدام برنامج نصي يقوم بهذا الأمر. فقط قم بتشغيل ./scripts/runserver.sh بدلاً من ./manage.py runserver وسيعمل بنفس الطريقة تماما, سوف يكون شكل البرنامج هكذا #!/bin/bash pid=$(ps aux | grep "./manage.py runserver" | grep -v grep | head -1 | xargs | cut -f2 -d" ") if [[ -n "$pid" ]]; then kill $pid fi fuser -k 8000/tcp ./manage.py runserver سوف يقوم بفحص هل هناك خادم مستخدم أم لا, اذا كان هناك يقوم بإيقافه, هناك طريقة أخرى وهو أن تكتب الأمر fg هذا الأمر سوف يظهر الخادم الذي يعمل في الخلفية, ثم الأمر ctl-c لايقافه
×
×
  • أضف...