不同的Django应用程序可以为不同的MIME类型提供相同的URL吗?

问题描述 投票:0回答:1

我希望一个URL,例如/users/fred,根据Accept标头提供不同的内容。如果请求的MIME类型为application/activity+json,则我想提供Fred帐户的ActivityPub表示形式;否则,我要提供HTML页面。

不同之处在于,我想在不同的Django应用程序中实现ActivityPub视图和HTML视图。如果它们位于不同的URL,则可以使用urls.py轻松完成此操作,但这似乎不允许Accept进行过滤。

是否有执行此操作的标准方法?我需要在中间件中实现一些新功能吗?

django mime-types dispatcher
1个回答
2
投票

[如果您要在urls.py路径本身中完成该计算,则不能。网址路径链接到单个视图函数(或View.as_view())。这些仅对网址本身应用模式匹配。

但是,您当然可以将其链接到第一个视图函数,该函数读取您的标头,然后根据其内容将其分派到正确的应用程序视图。

例如在urls.py

url_pattern = [
    ...
    path('/users/<str:username>', views.user_dispatch_view(), name='user-detail'),
]

在app1.views.py中

from app2.views import json_view

def html_view(request, **kwargs):
    '''
    Do your stuff, or even use a generic view instead,
    calling it with YourGenericView.as_view(request, **kwargs)
    '''

def user_dispatch_view(request, **kwargs):
    if request.Meta.get('Accept') == application/activity+json:
        return json_view(request, **kwargs)
    return http_view(request, **kwargs)
© www.soinside.com 2019 - 2024. All rights reserved.