學習django & python。Django直接轉到html模板
在完成本教程後,只需設置一個新的網站。現在爲了參數的緣故,我想添加一堆關於我們,FAQ基本html頁面的動態元素非常有限,你會繼續在每個頁面的urls.py文件中寫一行嗎?或者他們是否可以直接將所有* * .html映射到相關的.html文件?
一般來說即使它確實需要一個視圖,我也必須在每個頁面的url.py文件中寫一個新行?
學習django & python。Django直接轉到html模板
在完成本教程後,只需設置一個新的網站。現在爲了參數的緣故,我想添加一堆關於我們,FAQ基本html頁面的動態元素非常有限,你會繼續在每個頁面的urls.py文件中寫一行嗎?或者他們是否可以直接將所有* * .html映射到相關的.html文件?
一般來說即使它確實需要一個視圖,我也必須在每個頁面的url.py文件中寫一個新行?
只要URL中有一些唯一標識部分,就不需要爲每個直接模板url在urls.py中創建一個條目。
例如,您可以說所有以「.html」結尾的網址都是從模板中引用直接文件。
urlpatterns = patterns('django.views.generic.simple',
(r'(.+\.html)$', 'direct_to_template'),
# ...
)
做到這一點的一種方法是編寫一個包裝了direct_to_template
通用視圖的自定義視圖。包裝器可以接受參數並相應地形成模板的名稱並將其傳遞給direct_to_template
。這樣,您可以使用單個URL配置路由多個頁面。
事情是這樣的:
url(r'^foo/(?P<page_name>\w+).html$', 'my_static_wrapper', name = 'my_static_wrapper'),
def my_static_wrapper(request, page_name):
# form template name and call direct_to_template
不過我懷疑有更好的解決方案在那裏,雖然。
寫
url(r'^(?P<page_name>about|faq|press|whatever)/$', 'myapp.staticpage', name='static-pages')
在myapp
from django.views.generic.simple import direct_to_template
from django.http import Http404
def staticpage(request, page_name):
# Use some exception handling, just to be safe
try:
return direct_to_template(request, '%s.html' % (page_name,))
except TemplateDoesNotExist:
raise Http404
當然staticpage
視圖功能,你需要按照你的模板的命名約定其抓住你感興趣的靜態頁面的網址,但是這種模式可以根據需要進行擴展。
這比.+\.html
模式更好,因爲它會將不存在的模板視爲404s,而.+\.html
如果模板不存在則會爆炸500個錯誤。
如果您使用的class based views因爲direct_to_template
一直deprecated,您可以創建一個簡單的包裝,直接使自己的模板:
from django.views.generic import TemplateView
from django.template import TemplateDoesNotExist
from django.http import Http404
class StaticView(TemplateView):
def get(self, request, page, *args, **kwargs):
self.template_name = page
response = super(StaticView, self).get(request, *args, **kwargs)
try:
return response.render()
except TemplateDoesNotExist:
raise Http404()
,並在你的路由器:
from myapp.static.views import StaticView
urlpatterns = patterns('',
url(r'^(?P<page>.+\.html)$', StaticView.as_view()),
# ...
)
目前執行此操作的最佳方法是使用基於類的基於視圖的TemplateView:
from django.views.generic.base import TemplateView
url(r'^$', TemplateView.as_view(template_name='index.html'), name='home'),
如果您只想將單個頁面直接渲染爲視圖,而無需額外的上下文,則這是實現它的最簡單方法! – Thismatters 2017-11-04 16:10:16
謝謝,這不正是我所需要的,但是這個竅門。 ('(。+ \。html)$',direct_to_template), – 2010-08-04 22:47:58
Django 1.6:沒有模塊名爲simple – Timo 2014-09-15 06:54:37