【发布时间】:2012-07-17 12:54:36
【问题描述】:
我有一个网络应用程序,其中包含一个单独运行的项目(它是索引、登录.. 页面)。
如果安装了新应用程序,我需要更改索引页面(例如:添加链接、模板中的表格以及我的应用程序模型......)。让它充满活力。
应用的移除必须让项目完好无损,只需移除链接即可。
我该怎么做?有可能吗?
【问题讨论】:
标签: django django-views django-apps
我有一个网络应用程序,其中包含一个单独运行的项目(它是索引、登录.. 页面)。
如果安装了新应用程序,我需要更改索引页面(例如:添加链接、模板中的表格以及我的应用程序模型......)。让它充满活力。
应用的移除必须让项目完好无损,只需移除链接即可。
我该怎么做?有可能吗?
【问题讨论】:
标签: django django-views django-apps
你可以使用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 中会失败。
【讨论】:
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 %}
【讨论】:
或者使用自定义上下文处理器。
在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'
)
【讨论】:
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 %}
【讨论】:
INSTALLED_APPS。请改用django.apps.apps。 docs.djangoproject.com/en/3.0/ref/settings/…