django - 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))
)
解决方案
您可以在 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 %}
推荐阅读
- javascript - 使用 Javascript 总结 iframe 中的所有按键
- python - 通过将元素设置为变量来迭代列表
- c# - RabbitMQ.Client Exceptions: '没有一个指定的端点是可达的'
- wordpress - profile.php 中的显示字段
- kubernetes - Kubernetes 内部的高可用 ActiveMQ
- javascript - jQuery (3.4.1 / 3.3.1) load.() 不起作用,目前没有找到解决方案
- vue.js - 访问组件的变量
- ios - 以编程方式创建的 UIelement。我可以从变量中获取新创建的 UIelement 的名称吗?
- reactjs - 如何导出多个数组
- wcf - WCF 跟踪添加过滤器