我正在尝试使用随附的Django Sites框架创建多站点 Wagtail 项目。我在Wagtail文档中找不到如何分别为每个站点提供模板和静态信息。有人可以帮助我提供建议或指向某些教程的链接吗? 谢谢。
答案 0 :(得分:0)
在Wagtail中,视图逻辑存在于页面模型中。发出请求时,Wagtail URL解析器将调用页面serve
方法。 g代码形式wagtail.core.models.Page看起来像这样:
def get_template(self, request, *args, **kwargs):
if request.is_ajax():
return self.ajax_template or self.template
else:
return self.template
def serve(self, request, *args, **kwargs):
request.is_preview = getattr(request, 'is_preview', False)
return TemplateResponse(
request,
self.get_template(request, *args, **kwargs),
self.get_context(request, *args, **kwargs)
)
要回答您的问题:您必须重写get_template
并添加一些逻辑以使模板名称在每个站点中唯一。这是未经测试的代码,但是您可以理解:
class SomePage(Page):
...
def get_template(self, request, *args, **kwargs):
return request.site + super().get_template(request, *args, **kwargs)
现在,模板名称以站点为前缀。因此,您只需要提供名称正确的模板即可。
答案 1 :(得分:0)
在Wagtail 2.10中,此方法不再有效,request.site已弃用
相反,您可以这样做:
class SomePage(Page):
...
def get_template(self, request, *args, **kwargs):
return Site.find_for_request(request).site_name + '/' + super().get_template(request, *args, **kwargs)
如果需要引用ajax模板,也可以使用这种方法:
class SomePage(Page):
...
ajax_template = 'ajax_foo.html'
template = 'foo.html'
def get_template(self, request, *args, **kwargs):
template = Site.find_for_request(request).site_name + '/' + self.template
if request.is_ajax():
template = Site.find_for_request(request).site_name + '/' + self.ajax_template
return template