2017-07-07 107 views
0

用下面的渲染器...覆蓋Django的渲染方法

from django.shortcuts import render 
... 
return render(request, 'template.html', {'context':context,}) 

是否有可能重寫Render CLASSE的方法,讓我能在某些情況下解釋模板標籤自己舉例來說,如果我找到包括標籤一定的格式,如...

{% url 'website' page.slug %} 

我可以指出它...

/theme/theme-1/page.html 

/theme/theme-2/page.html 

取決於外掛設置。

回答

1

render方法是這個的快捷方式:

template = loader.get_template(''template.html') 
context = { 
    ..., 
} 
return HttpResponse(template.render(context, request)) 

因此,不要試圖更改URL標記的行爲,正確的位置。

對於您給出的示例,它看起來像網站應該是一個變量,其中包含theme-1theme-2。然後,您可以將該變量傳遞給url標記,而不是字符串'website'

{% url website page.slug %} 

如果這是不可能的,你可以創建一個custom template tagmy_url返回根據您的設置正確的URL。

+0

其他人將負責創建模板,並會直接使用{%url%}我只希望能夠在一個程序中加載多個網站,並在需要時攔截路由。這將是一個主題庫,但代碼必須正常運行後才能添加到實際站點。作爲@alasdair指出的 –

+0

,而不是改變渲染的默認行爲,你應該嘗試自定義模板標籤。看看這個SO帖子的例子https://stackoverflow.com/questions/6451304/django-simple-custom-template-tag-example – cutteeth

+0

你可以用你自己的標籤替換Django的url標籤,使用['BUILTINS' ](https://docs.djangoproject.com/en/1.11/topics/templates/#module-django.template.backends.django)選項。但我認爲這不是一個好主意。你也可以看看['TemplateResponse'](https://docs.djangoproject.com/en/1.11/ref/template-response/#templateresponse-objects)而不是'render',因爲它有額外的鉤子。 – Alasdair