这很简单明了但我无法做到:
我在urls.py
中声明了以下视图函数 (r'^v1/(\d+)$', r'custom1.views.v1'),
最初我将一个参数传递给视图函数v1。 我想修改它以传递2个参数。如何在urls.py中声明条目以获取两个参数?
答案 0 :(得分:12)
假设您希望网址看起来像v1/17/18
并获得两个参数17
和18
,您只需将模式声明为:
(r'^v1/(\d+)/(\d+)$', r'custom1.views.v1'),
除了请求对象之外,确保v1
接受两个参数:
def v1 ( request, a, b ):
# for URL 'v1/17/18', a == '17' and b == '18'.
pass
first example中的documentation about the URL dispatcher包含多种模式,最后一种模式包含2个和3个参数。
答案 1 :(得分:12)
在某个地方,我养成了在正则表达式中直接命名它们的习惯,虽然老实说我不知道它是否有所作为。
#urls:
(r'^v1/(?P<variable_a>(\d+))/(?P<variable_b>(\d+))/$', r'custom1.views.v1')
#views:
def v1(request, variable_a, variable_b):
pass
此外,使用尾部斜杠结束网址非常Django - Django Design Philosophy,仅供参考
答案 2 :(得分:8)
我相信正则表达式中的每个组都作为参数传递(如果需要,您可以命名它们):
(r'^v1/(\d+)/(\d+)/$', r'custom1.views.v1')
查看以下示例:https://docs.djangoproject.com/en/dev/topics/http/urls/。您也可以为您的群组命名。
答案 3 :(得分:4)
在Django 2.x和3.x中:
url:
path("courses/<slug:param1>/<slug:param2>", views.view_funct, name="double_slug")
模板:
<a href="{% url 'double_slug' param1 param2 %}">Click {{param2}}!</a>