【问题标题】:How to replace re "." in Django template url tag如何替换重新“。”在 Django 模板 url 标签中
【发布时间】: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 以获得好的呢?

标签: django django-urls


【解决方案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(无重音)和 _ 和 - 之间的字母。所以我只是以正确的方式抓住这个名字。
猜你喜欢
  • 2021-08-31
  • 2013-05-04
  • 2010-09-20
  • 2022-11-25
  • 2013-12-10
  • 1970-01-01
  • 2010-12-19
  • 2014-04-23
  • 2018-03-01
相关资源
最近更新 更多