Django url模式正则表达式将电子邮件作为参数传递到url中

use*_*793 7 python regex django

我正在写一个视图,它接受一个电子邮件作为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"),
Run Code Online (Sandbox Code Playgroud)

这是我的模板的内容

{% for consultant in list_consultants %}
    <li>
        {{consultant.id}}
        <a href="{% url consultant_service_detail consultant.id %}">{{ consultant|disp_info }}</a> <br/>
    </li>
{% endfor %}
Run Code Online (Sandbox Code Playgroud)

BUt当我访问网址时,我收到错误

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

请帮助我在我的正则表达式中我做错了为什么它不接受这封邮件.这是问题还是其他什么?

mik*_*725 16

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

{% url consultant_service_detail consultant_id=consultant.id %}
Run Code Online (Sandbox Code Playgroud)

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

{% url 'consultant_service_detail' consultant_id=consultant.id %}
Run Code Online (Sandbox Code Playgroud)

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

{% load url from future %}
{% url 'view_name' ... %}
Run Code Online (Sandbox Code Playgroud)

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

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"),
Run Code Online (Sandbox Code Playgroud)

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

foo.com/admin/detail_consultant_service/email.address@here.com/
Run Code Online (Sandbox Code Playgroud)

  • `(ΔP<consultant_id> [\ w%的+ - .] + @ [A-ZA-Z0-9 .-] +\[A-ZA-Z] {2,4})` (6认同)