【问题标题】:Adapt a view if an app is installed with Django如果应用程序与 Django 一起安装,则调整视图
【发布时间】:2012-07-17 12:54:36
【问题描述】:

我有一个网络应用程序,其中包含一个单独运行的项目(它是索引、登录.. 页面)。

如果安装了新应用程序,我需要更改索引页面(例如:添加链接、模板中的表格以及我的应用程序模型......)。让它充满活力。

应用的移除必须让项目完好无损,只需移除链接即可。

我该怎么做?有可能吗?

【问题讨论】:

    标签: django django-views django-apps


    【解决方案1】:

    你可以使用Django的application registry:

    In [1]: from django.apps import apps
    In [2]: apps.is_installed("django.contrib.admin")
    Out[2]: True
    

    应用程序实际上可以是enabled,方法是使用指向其包或应用程序配置类(首选)的虚线 Python 路径。在后一种情况下,简单地检查 "app_name" 是否在 settings.INSTALLED_APPS 中会失败。

    【讨论】:

      【解决方案2】:

      simple_tag版本:

      棘手的部分是 您不能将参数传递给您的 simple_tag 在条件中使用时。因此,您可以使用 as is_myapp_installed 专门为您安装的应用创建一个新变量。

      templatetags/my_filters.py:

      from django import template
      register = template.Library()
      
      @register.simple_tag
      def is_app_installed(app):
        from django.apps import apps
        return apps.is_installed(app)
      

      在模板中:

      {% load my_filters %}
         ...
      {% is_app_installed "myapp" as is_myapp_installed %}    
      {% if is_myapp_installed %}
         ...
      {% endif %}
      

      【讨论】:

        【解决方案3】:

        或者使用自定义上下文处理器。

        installed_apps.py

        from django.conf import settings
        
        def installed_apps(request):
            return {
               'app_installed' : 'app_name' in settings.INSTALLED_APPS
            }
        

        settings.py:

        TEMPLATE_CONTEXT_PROCESSORS = (
            ...
            'installed_apps.installed_apps'
        )
        

        【讨论】:

          【解决方案4】:
          def my_view(request):
              from django.conf import settings
              app_installed = 'app_name' in settings.INSTALLED_APPS
          
              return render_to_response(template_name, {'app_installed': app_installed})
          

          模板:

          {% if app_installed %}
              ...
          {% endif %}
          

          【讨论】:

          猜你喜欢
          • 2020-02-15
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-02-16
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-06-18
          相关资源
          最近更新 更多