【发布时间】:2013-10-09 01:06:15
【问题描述】:
我知道如何在 django 中使用 url resolve 获取 url 名称。
我想以类似方式处理来自某个应用的所有请求,所以我想我会通过从 url 获取应用名称来做到这一点。
我该怎么做?
【问题讨论】:
-
我认为这是一个有效的问题。取消 -1
标签: django django-urls
我知道如何在 django 中使用 url resolve 获取 url 名称。
我想以类似方式处理来自某个应用的所有请求,所以我想我会通过从 url 获取应用名称来做到这一点。
我该怎么做?
【问题讨论】:
标签: django django-urls
路径你会很头疼,因为你必须应用很多拆分。更好的方法是:
request.resolver_match 其中包含:
{'app_name': '', '_func_path': 'app_name.views.ClassName', 'args': (), 'func': , 'url_name': 'url-for-class', 'namespace': '', 'kwargs': {}, 'view_name': 'name-for-class', 'app_names': [], 'namespaces': []}
使用 request.resolver_match._func_path 将获取您的 app_name 以及 ClassName
【讨论】:
视图并不像模型那样真正绑定到应用程序。它们实际上只是 python 函数或类(取决于 FBV/CBV)。您可以解析视图并解析模块名称以“猜测”它来自哪个应用程序。
如果您使用基于类的视图,一个更好的解决方案是为实现该功能的给定应用中的所有视图创建一个公共基础视图。
这是样板:
class SpecificAppView(View):
def dispatch(self, request, *args, **kwargs):
# Do something specific
super(SpecificAppView, self).dispatch(request, *args, **kwargs)
class FirstView(SpecificAppView):
pass
class AnotherView(SpecificAppView):
pass
【讨论】:
我最终通过从 request.path 中提取信息来得到这个
【讨论】: