假设这是我的URL路线:
(r'^test/?$','hello.life.views.test'),
我如何制作它以便人们可以做.json,.xml,它会将变量传递给我的views.test,以便我知道要制作json或xml?
答案 0 :(得分:8)
添加到@ ziang的答案,如果你真的想模拟文件扩展名,你可以用这种方式编写正则表达式。 r'^test\.(?P<extension>(json)|(xml))$'
编辑:我将补充说,提供预期的返回内容类型作为参数肯定更加RESTful。
答案 1 :(得分:0)
将xml或json作为参数传递。您可以在URL中捕获它(r'^ test /(?P&lt; doc_type&gt; [^ /] +)$','hello.life.views.test'),
答案 2 :(得分:0)
我已经实现了类似的东西:
(r'^test$', 'test'),
(r'^test/(?P<format>json)$', 'test'),
在views.py中,我有类似的内容:
def list(request, format="html"):
if format == 'json':
...
elif format == 'html':
...
...
我已指定两个相似的网址格式,因为我希望extension
部分可选,并且在忽略时使用默认格式(在我的情况下为html
)。
似乎我无法在正则表达式中使用可选模式实现此功能,因为执行(?P<format>json)?
之类的操作会产生None
值,并且永远不会使用默认值。
希望这段经历对你有所帮助。
答案 3 :(得分:0)
我为我的api选择默认值(json)。如果最终开发人员想要使用不同的格式(yaml,xml等),我让他们将其作为get参数发送:
http://api.mysite.com/getinfo/?format=xml
def get_info_view(request):
format = request.GET.get(format, None)
if format:
# handle alternate (non-json) format
return json_object
答案 4 :(得分:0)
我认为问题的关键点是可以:
以便人们可以执行.json,.xml
这意味着格式是可选的。
@satoru&amp; @teepark将此作为第二个url()
条目。但是,为什么不把它变成一个具有良好正则表达式的呢?
url(r'^test(?:\.(?P<format>json|xml))?$', 'hello.life.views.test', name='test'),
答案 5 :(得分:0)
Django 3.0
re_path('api/test/values\.json', Api.as_view())
在我的情况下,它工作正常,网址看起来像:http://127.0.0.1:8000/api/test/values.json