include template tag not working in django

2020-06-12 02:53发布

问题:

My Views.py files looks like below

  def homepage(request):
      template = 'homepage.html'
      list_display_template = 'list.html'
      list = model.objects.all()

      return render_to_response(template,
           {'list_display_template': list_display_template,
            'list' : list,},
            context_instance=RequestContext(request))

And my homepage.html looks like below:-

  {% extends "base.html" %}

  {% block main_content %}
      {% include list_display_template %}
  {% endblock %}

And my list_display_template (list.html) has following information

  < div class= "span10">
     {% for item in list %}
         <p> {{ item }}</p>
      {% endfor %}
  </div>

The above works fine in development, but in production the include tag is not working and when i inspect the element, it is not showing any items from list.html. could someone help with this.

Edit :- My folder structure is as below

project_name/
    project_name/
         settings.py
    static/
       css/
       images/
    templates/
      homepage.html
      list.html
      base.html

Thanks

回答1:

I had the same problem,but i will answer this question in a way that other users with a similar problem can understand.

you probably have a template block of some kind in the included html file, this block either is expecting an include of some kind or is causing an error of which is calling exception that django passes and therefore you are not able to see the error, if you use {% load someLoad %} in the parent template then use it in the included html too, i guess this changes from version to version.

in my (very specific) case i had this missing in the included html file:

{% load i18n %} 
{% load cms_tags sekizai_tags %}


回答2:

I just had a similar problem. I was able to diagnose it by temporarily copying and pasting the html (i.e, navigation.html) that I wanted to include directly into the parent page (base.html). It seems that if there are errors in the included html, it just doesn't get read in and no errors appear.

With the code from navigation.html pasted into base.html I got a 500 error because one of the named urls in navigation.html had no reverse.



回答3:

If there is any issue/ error with the include template, django by default won't show the error. You can enable it using the setting variable TEMPLATE_DEBUG = True Then you will able to view the error in the template when you try to load that page.

In the above case there may be some load tag is missing {% load xxx %} in the included template.



回答4:

Another situation where an include statement will fail without raising an error is if you are working in a template which extends another, and your include is outside of a named block:

{% extends "my_base.html" %}

{% block content %}
    {{ block.super }}
    {% include "partials/file1.html" %}
{% endblock %}

{% include "partials/file2.html" %}

In this case file2.html will not be included because it is not in a block, and you will get no warning messages, and will try all sorts of things before you realise what you've done :-)



标签: django