如果使用Django安装了应用程序,请调整视图

时间:2012-07-17 12:54:37

标签: django django-views django-apps

我有一个单独运行的项目的Web应用程序(它的索引,登录页面)。

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

删除应用程序必须保持项目完整,只需删除链接。

我该怎么做?有可能吗?

4 个答案:

答案 0 :(得分: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 %}

答案 1 :(得分:4)

您可以使用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 :(得分: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'
)

答案 3 :(得分:0)

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 %}