如何替换重新“。”在 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<course_type>[a-z_-]+)/(?P<courseid>[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 标签中的主要内容,如果未能解决你的问题,请参考以下文章