django url模式有2个参数

时间:2011-07-05 19:17:08

标签: django

这很简单明了但我无法做到:

我在urls.py

中声明了以下视图函数
 (r'^v1/(\d+)$', r'custom1.views.v1'),

最初我将一个参数传递给视图函数v1。 我想修改它以传递2个参数。如何在urls.py中声明条目以获取两个参数?

4 个答案:

答案 0 :(得分:12)

假设您希望网址看起来像v1/17/18并获得两个参数1718,您只需将模式声明为:

(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>