开发者

Django: cannot pass variable to included template?

开发者 https://www.devze.com 2023-02-01 19:13 出处:网络
I got a problem where I want to use template including in Django. Here is the real example: I got 3 files:

I got a problem where I want to use template including in Django.

Here is the real example: I got 3 files:

  • home.html (will get the context variable passed from Views)
  • base.html (the skeleton template file)
  • and the header.html (include开发者_如何学JAVAd by base.html).

If I put the code below directly in base.html without including header.html, the {{title}} variable passed from home is correctly called. But if I include the header.html in base.html, the {{title}} variable's value cannot be called.

<title>{% block title %}{% endblock %} | {{ SITE_INFO_TITLE }}</title>

Is there any solution to this problem? Thanks.


Could you just pass in a variable within the {% include %} tag? It's documented here: https://docs.djangoproject.com/en/1.5/ref/templates/builtins/#include

{% include "name_snippet.html" with person="Jane" greeting="Hello" %}


As far as I know blocks and variable are distinct in django. If you want to pass title as a context variable you have to set it using a declaration in base.html such as :

{% include "header.html"%} 

Which in turn contains :

{% block title %} {{title}} {%endblock%}

You can also set it in home like this.
{% block title %} Home page {%endblock%} But I also try to set in the template context. Without the title block.

def test_view(ctx):
  xa = { "title":"Sommaire"}
  return render_to_response("test.html",xa)

I think you can also see the with template tag I think it is possible to set a context variable using this tag.


You can use Inclusion Tags to render an additional template from within a Django template. You can additionally pass the 'child' template context from the 'parent' template.

It's a little involved for your use case but it solves your problem. I tend to use it when I'm looping a list to render each item with a custom template. I can then reuse that template elsewhere without duplicating the markup if I need to render another item of the same type.

0

精彩评论

暂无评论...
验证码 换一张
取 消