首页 > 解决方案 > django 模板内部 url 连接

问题描述

在我的 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 %}

但是,它不起作用。类别太多,我无法对它们中的任何一个进行硬编码,但必须使用 django 模板制作 url "(domain root)/category/(category name)"。如何在模板中连接两个 url(就像 django 一样

path(A, include(B)) 

)

标签: django

解决方案


您可以在 Category 模型中定义一个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 %}

推荐阅读