我正在尝试为所有应用程序创建一个模板,但具有不同的基础(与应用程序相关)。
我正在使用 django_hosts:
主机.py:
from django_hosts import patterns, host
host_patterns = patterns('',
host(r'app1', 'app1.urls', name = 'app1'),
host(r'(app2|application2)','app2.urls', name = 'app2'),
)
树:
templates/document.html
app1/templates/app1/base.html
app2/templates/app2/base.html
模板/document.html:
{% extends base %}
这个想法是:
当我去时,http://app1.example.com/document/
我会看到templates/document.html
扩展名app1/templates/app1/base.html
,如果我去http://app2.example.com/document/
或http://application2.example.com/document/
扩展名app2/templates/app2/base.html
一般来说,如果我在
app1/views.py:
(...)
context={ 'base' : 'app1/base.html' }
return render(request,'document.html', context)
应用程序2/views.py:
(...)
context={ 'base' : 'app2/base.html' }
return render(request,'document.html', context)
但我想从每个视图的 def 中删除上下文“基础”。
我不能使用app1/context_processors.py
and app2/context_processors.py
,因为它会覆盖自己,因为 context_processors 是全局的而不是应用程序本地的。
有个想法:
#main/contexts.py
from django.core.urlresolvers import resolve
def appname(request):
return {'appname': resolve(request.path).app_name}
但我没有包含包含的 urls.py,因为我有主机定义....