如何替换重新“。”在 Django 模板 url 标签中

Posted

技术标签:

【中文标题】如何替换重新“。”在 Django 模板 url 标签中【英文标题】:How to replace re "." in Django template url tag 【发布时间】:2018-03-01 19:01:34 【问题描述】:

我有如下所示的 Django url 路由:

app_name = 'courses'
urlpatterns = [
  url(r'./(?P<courseid>[0-9]+)/$', views.viewcourse, name='view_course'),
  url(r'./(?P<courseid>[0-9]+)/review/$', views.reviewcourse, name='review_course')
]

“。”在正则表达式中通常会被替换为 slug,例如:

courses/computer-science/3/

现在我需要在“查看课程”模板中添加一个链接,以将用户带到评论页面,即:

courses/computer-science/3/review/

我可以通过简单地将review 附加到当前网址来做到这一点:

request.path review

但是,我宁愿使用模板 url 标签以“正确”的方式进行操作

% url 'courses:review_course' courseid=course.pk %

但是,这会产生:

courses/30/review,当然失败了。

是否可以使用 % url % 标签生成正确的链接,而无需更改“。”到名称捕获参数中?

【问题讨论】:

你为什么不做url(r'(?P&lt;course_type&gt;[a-z_-]+)/(?P&lt;courseid&gt;[0-9]+)/$', views.viewcourse, name='view_course') 并在你的视图参数中捕捉course_type 以获得好的呢? 【参考方案1】:

更改您的 urls.py :

url(r'(?P<course_type>[a-z_-]+)/(?P<courseid>[0-9]+)/$', views.viewcourse, name='view_course')

现在,在您看来,您可以在 kwargs 中访问 course_type,然后您可以加载任何您想要的内容(因为我没有代码,我猜你在做什么 :))。

在你的模板中:

% url 'courses:review_course' courseid=course.pk course_type=something%

【讨论】:

您认为这是“最佳实践”吗? 这是明智的做法 使用 [a-z_-]+ 而不仅仅是“.”有什么好处? ?这个想法是,只要 courseid 正确,任何字符串都应该工作。 嗯,它实际上是 url 中的一个字符串,而 url 组件是 a-z(无重音)和 _ 和 - 之间的字母。所以我只是以正确的方式抓住这个名字。

以上是关于如何替换重新“。”在 Django 模板 url 标签中的主要内容,如果未能解决你的问题,请参考以下文章

Django 模板标签插入或替换 URL 参数

有没有办法使用常量替换在 django 模板中的 html 文件中传递 URL 值?

单击指向另一个模板的链接时,Django 模板只会重新加载

Django04-模板系统Template

django url 反响解析,视图

Django 在图像字段的模板中添加 %2f 代替 /