Python Django管理中的Django应用程序切换器

Python Django管理中的Django应用程序切换器,python,django,Python,Django,我有一个Django项目,其中有3个应用程序。附件1、附件2、附件3 我想创建一个界面,允许管理员激活任何应用程序 管理员可以从管理员界面更改当前活动的应用程序。 主意 创建一个包含3个选项的模型作为应用程序 允许管理员从应用程序中进行选择。 这是我的想法;但是,还有哪些事情会相应地发生变化呢 选项 支票在哪里更有意义?URL.py或已安装的应用程序? 如何有效地检查和管理当前激活的应用程序 有人能给我建议一些方法吗 谢谢 您不能仅从已安装的应用程序中删除该应用程序,因为您的项目url.py引用

我有一个Django项目,其中有3个应用程序。附件1、附件2、附件3 我想创建一个界面,允许管理员激活任何应用程序

管理员可以从管理员界面更改当前活动的应用程序。 主意 创建一个包含3个选项的模型作为应用程序 允许管理员从应用程序中进行选择。 这是我的想法;但是,还有哪些事情会相应地发生变化呢

选项 支票在哪里更有意义?URL.py或已安装的应用程序? 如何有效地检查和管理当前激活的应用程序

有人能给我建议一些方法吗


谢谢

您不能仅从已安装的应用程序中删除该应用程序,因为您的项目url.py引用了该应用程序的URL。因此,您必须以某种方式在url级别处理任务

我认为最简单的解决方案是创建一个中间件,它将捕获禁用应用程序的URL并引发404错误:

models.py

管理员

设置.py

app/middleware.py

现在,管理员可以将任何url添加到阻止的url列表中,但不要尝试将/admin/添加到此列表中:-


当然,这只是概念证明,您的逻辑可能会有所不同。

如果管理员添加不属于特定应用程序的每个新url,那将是非常忙碌的。我希望,如果我更改模型中的值,请选择一个应用程序,然后保存;我的服务器重新启动。为什么?服务器何时重启;它将从模型中加载新值,并在settings.py中进行设置。
class BlockedUrl(models.Model):

    url_to_block = models.CharField(max_length=100,
                                    help_text='For exaple: /polls/')

    def __unicode__(self):
        return self.url_to_block
class BlockedUrlAdmin(admin.ModelAdmin):
    pass

admin.site.register(BlockedUrl, BlockedUrlAdmin)
MIDDLEWARE_CLASSES = (
    ...
    'app.middleware.BlockedUrlsMiddeware',
)
from django.http import Http404    
from app.models import BlockedUrl

class BlockedUrlsMiddeware(object):

    def process_request(self, request):
        for url in BlockedUrl.objects.values_list('url_to_block', flat=True):
            if request.path.startswith(url):
                raise Http404