5

我有一个 Web 应用程序,其中有一个单独工作的项目(它是索引、登录 .. 页面)。

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

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

我怎样才能做到这一点?是否可以?

4

4 回答 4

12

您可以使用 Django 的应用程序注册表

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

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

于 2017-04-03T16:38:56.753 回答
5
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 %}
于 2012-07-17T13:03:46.693 回答
5

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

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'
)
于 2016-04-08T16:58:02.537 回答
1

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 %}
于 2018-05-21T14:34:00.397 回答