我如何在我的Django URL中执行此操作? (.json,.xml)

时间:2010-04-11 23:28:33

标签: python django json http url

假设这是我的URL路线:

(r'^test/?$','hello.life.views.test'),

我如何制作它以便人们可以做.json,.xml,它会将变量传递给我的views.test,以便我知道要制作json或xml?

6 个答案:

答案 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'),

验证:https://regex101.com/r/iQ8gG4/1

答案 5 :(得分:0)

Django 3.0

re_path('api/test/values\.json', Api.as_view())

在我的情况下,它工作正常,网址看起来像:http://127.0.0.1:8000/api/test/values.json