【问题标题】:What is the common practice for white labeling a Django site?给 Django 网站贴上白标签的常见做法是什么?
【发布时间】:2013-03-24 05:55:45
【问题描述】:

我有一个网络应用程序,我想为我们的客户提供白标。我在 PHP/ZendFramework 中完成了此操作,关闭主机名 (http://example.com),从数据库中提取徽标/颜色/其他并使用这些设置呈现主布局。

我是 Python/Django1.5 的新手,想知道是否有人在他们的应用程序中实现了白标功能。你是怎么做到的?有没有通用的做法?

我做了一些谷歌搜索,发现一个较旧的博客使用 url 前缀实现了白标功能,但在渲染布局时我仍然遇到一些问题

http://chase-seibert.github.com/blog/2011/08/05/django-white-label-styling-with-url-prefixes.html

任何帮助都会很棒!谢谢

【问题讨论】:

  • 我正在尝试基本上做同样的事情。你有想过吗?如果是这样,您能否发布您的解决方案作为答案?
  • 我已经提交了我的答案,希望对您有所帮助。
  • 感谢您的回答。我真的很感激它,它证实了我的一些想法。如果有更好的方法,我希望有人发布它,等等。但是,现在,我想我会接受你的解决方案。 :) 再次感谢。
  • 没问题,希望能成功!

标签: django python-2.7 django-templates django-urls white-labelling


【解决方案1】:

我没有找到一个好的答案,所以我只是实现了我自己的解决方案。

我所做的是创建一个看起来像这样的Whitelabel 模型:

class Whitelabel(models.Model):
    name = models.CharField(max_length=255, null=False)
    logo = models.CharField(max_length=255, null=True, blank=True)
    primary_domain = models.CharField(max_length=256, null=False) 

然后我在application_name/context_processors.py 中创建了一个上下文处理器,它检查当前主机域并查看它是否匹配任何记录primary_domain 字段。如果匹配,则返回namelogo 的值并将它们分配给参数SITE_NAMESITE_LOGO。如果未找到匹配项,请为 SITE_NAMESITE_LOGO 分配默认值,这可能是您的默认应用程序名称。

def whitelabel_processor(request):
    current_domain = request.get_host() 
    whitelabel = Whitelabel.objects.filter(primary_domain=current_domain).order_by('id')

    if whitelabel.count() != 0:
        config = {
            'SITE_NAME': whitelabel[0].name, 
            'SITE_LOGO': whitelabel[0].logo, 
            'SITE_DOMAIN': whitelabel[0].primary_domain
            }
    else:
        config = {
            'SITE_NAME': 'MY SITE', 
            'SITE_LOGO': '/static/images/logo.png', 
            'SITE_DOMAIN': 'http://%s' % Site.objects.get_current().domain
            }

    return config

然后我将上下文处理器添加到TEMPLATE_CONTEXT_PROCESSORS下的设置文件中

TEMPLATE_CONTEXT_PROCESSORS = (
    "django.contrib.auth.context_processors.auth",
    ...
    "context_processors.whitelabel_processor",

)

这样我就可以在我的base.html 模板中这样称呼他们

<body>
    <h1>{{SITE_NAME}}</h1>
    <img src="{{SITE_LOGO}}" />
</body>

这里有更多关于模板上下文处理器的文档。 https://docs.djangoproject.com/en/dev/ref/templates/api/#writing-your-own-context-processors

【讨论】:

    猜你喜欢
    • 2011-07-16
    • 2014-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-14
    • 1970-01-01
    • 2010-10-16
    • 2011-05-16
    相关资源
    最近更新 更多