Django Admin中的Django应用程序切换器

2024-04-19 02:17:21 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个Django Project,里面有3个应用程序。app1, app2, app3 我想创建一个接口,允许管理员激活任何应用程序。你知道吗

  • 管理员可以从管理界面更改当前(活动的)应用程序。你知道吗

想法

  1. 创建一个包含3个选项的模型作为应用程序
  2. 允许管理员从应用程序中选择。你知道吗

我是这么想的,但是还有什么东西会相应地改变呢?你知道吗

期权

支票在哪里更有意义?urls.py还是INSTALLED_APPS? 如何有效地检查和管理当前激活的应用程序?你知道吗

有人能给我建议一些方法吗?你知道吗

谢谢。你知道吗


Tags: installeddjangopy模型project应用程序界面管理员
1条回答
网友
1楼 · 发布于 2024-04-19 02:17:21

你不能仅仅从INSTALLED_APPS中删除应用程序,因为你的项目urls.py引用了应用程序的url。因此,您必须以某种方式在url级别处理任务。你知道吗

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

型号.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

管理员.py

class BlockedUrlAdmin(admin.ModelAdmin):
    pass

admin.site.register(BlockedUrl, BlockedUrlAdmin)

设置.py

MIDDLEWARE_CLASSES = (
    ...
    'app.middleware.BlockedUrlsMiddeware',
)

应用程序/中间件.py

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

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

当然,这只是概念的证明,你的逻辑可能不同。你知道吗

相关问题 更多 >