使用不同的文本渲染相同的模板?

时间:2017-03-29 22:18:43

标签: django

我的Django项目有大约4-5个模板。我希望每个模板使用大约10页(每组10个不同的内容/文本)。

我一直在使用上下文在每个页面渲染时填写相关内容。

但是,由于内容非常庞大,我不确定是否有任何潜在的性能损失。是否有一种简洁有效的方法来呈现一个模板,其中的内容与点击上一页的链接相关。

我目前正在做的事情:

的index.html

<div class='well well-sm well-md well-lg'>

<h1> {{variable1}} </h1>

</div>

views.py

def page1(request):


   variable1 = 'Long text for each variable. Many variables on each page so       
   lots of long text overall. '

   return render(request, 'index/base.html', {'variable': variable1})

def page2(request):


   variable1 = 'More long text. '

   return render(request, 'index/base.html', {'variable': variable1})

基本上我想知道是否有办法在不必使用上下文的情况下完成上述操作。或者我是否必须为每个页面创建一个模板?

2 个答案:

答案 0 :(得分:0)

检查django tutorial doc 在网址:

url(r'^(?P<page_id>[0-9]+)/$', views.page, name='page'),

在视图中:

def page(request, page_id):
   // have a dict or list, get result using the page_id
   return render(request, 'index/base.html', {'variable': variable})

或者,如果您没有page_id / name系统,则可以使用:

def page(request):
    url = request.path
    value = dict[url]
    render (...) 

答案 1 :(得分:0)

您需要分两步解决。

  1. 确定上一页,以便选择合适的文字。
  2. 您可以在视图中解决此问题。只需设置一些上下文变量即可传递给模板。我相信这在模板处理中并不容易,视图更好。

    示例代码

    def page(request):
       if previous_page == "some page 1"
           page_type = 1
       elif previous_page == "some page 2"
           page_type = 2
       return render(request, 'index/base.html', {'page_type': page_type})
    
    1. 然后在模板中使用{%include%}标记以使用适当的模板。
    2. 示例index.html

      <div class='well well-sm well-md well-lg'>
      
      {% if page_type == 1 %}
          {%include "page_type1.html"%}
      {%else%}
          {%include "page_type2.html"%}
      {%endif
      </div>
      

      您需要为需要渲染的html编写2个模板page_type1.htmlpage_type2.html