шаблон django внутренняя конкатенация URL - PullRequest
0 голосов
/ 17 марта 2019

В моем проекте django у меня есть шаблоны URL, как показано ниже.

urls.py в корне проекта:

urlpatterns = [
    path('', include('blog.urls')),
]

urls.py в корне приложения (блога):

urlpatterns = [
    path('', views.index, name='index'),
    path(
        'category/<str:category_id>',
        views.category_view, 
        name='category_view',
    ),
]

Я хочу сделать гиперссылку для каждой категории с помощью шаблона django. Нечто вроде ниже.

{% for category in categories %} .
    <a href="{{ {% url 'index' %}|add: {% url 'category_view' category %} }} " class="nav">
        {{category}}
    </a>
{% endfor %}

Однако это не работает. Есть слишком много категорий, которые я не могу жестко кодировать ни одной из них, но мне нужно сделать URL "(домен root) / category / (имя категории)" с шаблоном django. Как я могу объединить два URL в шаблоне (как Django делает с

path(A, include(B)) 

)

1 Ответ

1 голос
/ 17 марта 2019

Вы можете определить метод get_absolute_url в вашей модели категории, это гораздо более чистое решение: https://docs.djangoproject.com/en/2.1/ref/models/instances/#get-absolute-url

Пример реализации:

from django.urls import reverse_lazy
# for django < 1.10 from django.core.urlresolvers import reverse_lazy

class Category(models.Model):
    ...
    def get_absolute_url(self):
       return reverse_lazy('category_view', category_id=self.id)

и в вашем шаблоне:

{% for category in categories %} .
    <a href="{{ category.get_absolute_url }}" class="nav">
        {{category}}
    </a>
{% endfor %}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...