1

我有一個web應用程序,我想爲我們的客戶提供白色標籤。我已經在PHP/ZendFramework中完成了這項工作,鍵入主機名(http://example.com),從數據庫中提取徽標/顏色/其他,並使用這些設置呈現主佈局。白色標記Django站點的常見做法是什麼?

我是Python/Django1.5的新手,想知道是否有人在他們的應用程序中實現了白標籤功能。你是怎麼做到的?有沒有普遍的做法?

我做了一些谷歌搜索,發現了一箇舊的博客使用URL前綴實現的白色標籤的功能,但我仍然運行到一些問題,撕心裂肺的佈局

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

任何幫助將是大!謝謝

+0

我想基本上做同樣的事情。你有沒有發現它?如果是這樣,你可以發佈你的解決方案作爲答案? –

+0

我已經提交了我的答案,我希望它對你有幫助。 –

+0

感謝您的回答。我真的很感激它,它證實了我在想的一些事情。如果有更好的方法,我會喜歡有人發佈它等,但現在,我認爲我正在與您的解決方案。 :) 再次感謝。 –

回答

4

我沒有找到一個好的答案,所以我只是實現了我自己的解決方案。

我所做的就是創建一個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> 

以下是圍繞模板上下文的更多文檔ocessors。 https://docs.djangoproject.com/en/dev/ref/templates/api/#writing-your-own-context-processors

相關問題