【问题标题】:Error NoReverseMatch on Reverse Django URL反向 Django URL 上的错误 NoReverseMatch
【发布时间】:2014-11-21 18:50:18
【问题描述】:

我已经在 django 1.7 中声明了如下网址:

url(r'^page(/\w{2}/|/)$', MyView.as_view(), name='my_name'),

在我的模板中,我想将其名称中的 url 反转。我试过了:

<form  method="post" action="{% url 'my_namespace:my_name' variable %}">

<form  method="post" action="{% url 'my_namespace:my_name' %}">

但是没有任何效果,它抛出了异常:

未找到带有参数“(u'test',)”和关键字参数“{}”的“my_name”的反向操作。尝试了 1 个模式:['page(\/\w{2}\/|\/)$']

请给我一些建议。谢谢。

【问题讨论】:

    标签: django


    【解决方案1】:

    匹配参数“test”的正则表达式看起来不正确。

    如果我们看一下正则表达式(/\w{2}/|/), 它似乎正在捕获由“或”(|)运算符分隔的两个组。

    第一组是/\w{2}/。这只会匹配 '/' 后跟 \w 2 次后跟 '/'。

    第二组只匹配'/'。

    'test' 不匹配其中任何一种情况,因此会引发异常。

    我相信我们希望在这里捕获的正确正则表达式是,

    (\w+)
    

    正确的 URL 结构如下所示,

    url(r'^page/(\w+)/$', MyView.as_view(), name='my_name')
    url(r'^page/$', MyView.as_view(), name='my_name')
    

    这将匹配给定参数“test”,因为正则表达式 (\w+) 表示匹配该组中的任何字符 [a-zA-Z0-9_] 一次或多次,并且“test”中的每个字符都属于此类别。

    【讨论】:

    • 我尝试传递两个字符变量 'ab' 而不是 'test' 但它仍然不起作用。但是,如果我按照您的建议将该网址拆分为 2,则效果很好。这可能是两个只使用一个 url 声明吗?
    • 是的,URL 中的参数将消除对 URL 的调用的歧义。
    猜你喜欢
    • 2014-01-20
    • 2023-03-21
    • 1970-01-01
    • 1970-01-01
    • 2012-06-07
    • 2017-03-14
    • 1970-01-01
    • 2019-12-15
    • 2023-03-29
    相关资源
    最近更新 更多