sly*_*ete 25 python regex django
有人可以解释一下你如何编写一个url模式和允许可选参数的视图?我已成功完成此操作,但我总是打破url模板标记.
这是我目前的情况:
图案
(r'^so/(?P<required>\d+)/?(?P<optional>(.*))/?$', 'myapp.so')
Run Code Online (Sandbox Code Playgroud)
视图
def so(request, required, optional):
Run Code Online (Sandbox Code Playgroud)
如果我在这个示例中使用url模板标记提供两个参数,它就可以正常工作; 但是,如果我省略了可选参数,我会得到一个反转错误.
我怎么能做到这一点?
谢谢,皮特
Tod*_*ner 38
我通常使用一个名为url的两个模式:
url(r'^so/(?P<required>\d+)/$', 'myapp.so', name='something'),
url(r'^so/(?P<required>\d+)/(?P<optional>.*)/$', 'myapp.so', name='something_else'),
Run Code Online (Sandbox Code Playgroud)
Vis*_*oru 18
Django网址是多态的:
url(r'^so/(?P<required>\d+)/$', 'myapp.so', name='sample_view'),
url(r'^so/(?P<required>\d+)/(?P<optional>.*)/$', 'myapp.so', name='sample_view'),
Run Code Online (Sandbox Code Playgroud)
很想知道你必须这样做:
def sample_view(request, required, optional = None):
Run Code Online (Sandbox Code Playgroud)
所以你可以使用相同的名称调用它,它将工作url解析器工作正常.但请注意,您不能将None作为必需参数传递,并期望它将使您无需参数进入正则表达式:
错误:
{% url sample_view required optional %}
Run Code Online (Sandbox Code Playgroud)
正确:
{% if optional %}
{% url sample_view required optional %}
{% else %}
{% url sample_view required %}
{% endif %}
Run Code Online (Sandbox Code Playgroud)
我不知道这是否记录在任何地方 - 我偶然发现它 - 我忘了重写网址名称,它仍在工作:)
其他人已经展示了使用两个单独命名的URL模式来处理此问题的方法.如果重复部分URL模式困扰您,可以通过使用include()来摆脱它:
url(r'^so/(?P<required>\d+)/', include('myapp.required_urls'))
Run Code Online (Sandbox Code Playgroud)
然后添加一个required_urls.py文件:
url(r'^$', 'myapp.so', name='something')
url(r'^(?P<optional>.+)/$', 'myapp.so', name='something_else')
Run Code Online (Sandbox Code Playgroud)
通常我不认为这是值得的,除非有相当多的URL(当然超过两个)的共同前缀.
| 归档时间: |
|
| 查看次数: |
23481 次 |
| 最近记录: |