كيفية إنشاء عناوين URL في جانغو
-
09-06-2019 - |
سؤال
في لغة قالب Django، يمكنك استخدام {% url [viewname] [args] %}
لإنشاء عنوان URL لعرض محدد باستخدام المعلمات.كيف يمكنك أن تفعل الشيء نفسه برمجياً في كود بايثون؟
ما أحتاج إليه هو إنشاء قائمة بعناصر القائمة حيث يكون لكل عنصر اسم وعنوان URL وعلامة نشطة (سواء كانت الصفحة الحالية أم لا).وذلك لأن القيام بذلك في بايثون سيكون أكثر نظافة من لغة القالب.
المحلول
إذا كنت بحاجة إلى استخدام شيء مشابه لـ {% url %}
علامة القالب في التعليمات البرمجية الخاصة بك، يوفر Django django.core.urlresolvers.reverse()
.ال reverse
تحتوي الوظيفة على التوقيع التالي:
reverse(viewname, urlconf=None, args=None, kwargs=None)
نصائح أخرى
أنا أستخدم طريقتين مختلفتين في بلدي 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
).