7

我正在编写一个视图,它接受电子邮件作为 url 传递的参数,例如

url(r'^admin/detail_consultant_service/((?P<consultant_id>\[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}))/$',
            'admin_tool.views.consultant_service_detail', name="consultant_service_detail"),

这是我的模板的内容

{% for consultant in list_consultants %}
    <li>
        {{consultant.id}}
        <a href="{% url consultant_service_detail consultant.id %}">{{ consultant|disp_info }}</a> <br/>
    </li>
{% endfor %}

但是当我访问网址时,我收到了错误

everse for 'consultant_service_detail' with arguments '(u'rahul183@gmail.com',)' and keyword arguments '{}' not found.

请帮我解决我在正则表达式中做错了什么,为什么它不接受这封邮件。这是问题还是其他原因?

4

2 回答 2

17

您传递的是位置参数而不是关键字参数。以下应该有效:

{% url consultant_service_detail consultant_id=consultant.id %}

此外,如果您使用 Django>=1.5,您应该使用url如下:

{% url 'consultant_service_detail' consultant_id=consultant.id %}

而且由于这是一种新行为,您实际上可以(推荐)在早期版本的 Django(我认为 >=1.3)中使用:

{% load url from future %}
{% url 'view_name' ... %}

我认为这里的正则表达式很好,所以问题很可能与定义本身有关。试试这个:

url(r'^admin/detail_consultant_service/(?P<consultant_id>[\w.%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4})/$',
    'admin_tool.views.consultant_service_detail',
    name="consultant_service_detail"),

所以一个有效的 url 将类似于:

foo.com/admin/detail_consultant_service/email.address@here.com/
于 2013-07-02T15:27:20.590 回答
0

如果您在一个项目中有多个应用程序,这很可能是这里的情况,您的 url 应该是命名空间的。模板中的 url 应该是这里解释的格式

{% url 'My-App-Name:my-url-name' args or kwargs %}

因此你的代码应该是这样的,

{% url 'Your-app-Name:consultant_service_detail' consultant_id=consultant.id %}
于 2015-10-08T17:15:03.037 回答