Django url模式regex在u中作为参数传递电子邮件

2024-05-17 11:14:27 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在写一个视图,它接受一个电子邮件作为通过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 %}

但是当我访问url的时候,我得到了一个错误

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

请帮我弄清楚我在regex中做错了什么,为什么它不接受这封邮件。这是问题还是别的什么?


Tags: 视图idurlfor参数admin电子邮件service
2条回答

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

{% 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' ... %}

根据here,我认为regex很好,所以问题很可能出在定义本身上。试试这个:

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/

如果在一个项目中有多个应用程序(这里很可能是这种情况),那么您的url应该是有名称空间的。模板中的url应采用如下格式Here

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

所以你的代码应该是这样的

{% url 'Your-app-Name:consultant_service_detail' consultant_id=consultant.id %}

相关问题 更多 >