【问题标题】:get app name from url in django从 django 中的 url 获取应用程序名称
【发布时间】:2013-10-09 01:06:15
【问题描述】:

我知道如何在 django 中使用 url resolve 获取 url 名称。

我想以类似方式处理来自某个应用的所有请求,所以我想我会通过从 url 获取应用名称来做到这一点。

我该怎么做?

【问题讨论】:

  • 我认为这是一个有效的问题。取消 -1

标签: django django-urls


【解决方案1】:

路径你会很头疼,因为你必须应用很多拆分。更好的方法是:

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

【讨论】:

    【解决方案2】:

    视图并不像模型那样真正绑定到应用程序。它们实际上只是 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
    

    【讨论】:

    • This 可能是将应用程序名称从视图中移出的一个很好的用例?
    【解决方案3】:

    我最终通过从 request.path 中提取信息来得到这个

    【讨论】:

      猜你喜欢
      • 2012-09-16
      • 2018-08-24
      • 2013-10-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-06
      • 2011-01-13
      相关资源
      最近更新 更多