سؤال

في لغة قالب Django، يمكنك استخدام {% url [viewname] [args] %} لإنشاء عنوان URL لعرض محدد باستخدام المعلمات.كيف يمكنك أن تفعل الشيء نفسه برمجياً في كود بايثون؟

ما أحتاج إليه هو إنشاء قائمة بعناصر القائمة حيث يكون لكل عنصر اسم وعنوان URL وعلامة نشطة (سواء كانت الصفحة الحالية أم لا).وذلك لأن القيام بذلك في بايثون سيكون أكثر نظافة من لغة القالب.

هل كانت مفيدة؟

المحلول

إذا كنت بحاجة إلى استخدام شيء مشابه لـ {% url %} علامة القالب في التعليمات البرمجية الخاصة بك، يوفر Django django.core.urlresolvers.reverse().ال reverse تحتوي الوظيفة على التوقيع التالي:

reverse(viewname, urlconf=None, args=None, kwargs=None)

https://docs.djangoproject.com/en/dev/ref/urlresolvers/

نصائح أخرى

أنا أستخدم طريقتين مختلفتين في بلدي models.py.الأول هو permalink مصمم الديكور:

from django.db.models import permalink

def get_absolute_url(self): 
    """Construct the absolute URL for this Item."""
    return ('project.app.views.view_name', [str(self.id)])
get_absolute_url = permalink(get_absolute_url)

يمكنك أيضًا الاتصال reverse مباشرة:

from django.core.urlresolvers import reverse

def get_absolute_url(self): 
    """Construct the absolute URL for this Item."""
    return reverse('project.app.views.view_name', None, [str(self.id)])

انتبه إلى أن استخدام reverse() يتطلب أن تكون وحدة urlconf الخاصة بك خالية من الأخطاء بنسبة 100% ويمكن معالجتها - لا ViewDoesNotExist أخطاء أو نحو ذلك، أو تحصل على اللعين NoReverseMatch استثناء (الأخطاء في القوالب عادة ما تفشل بصمت مما يؤدي إلى None).

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top