2013-04-10 14 views
9

plików My views.py wygląda poniżejzawierać szablon nie działa w Django

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)) 

A moja homepage.html wygląda jak poniżej: -

{% extends "base.html" %} 

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

A moja list_display_template (list.html) ma następujące informacje:

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

Powyższe działa dobrze w fazie rozwoju, ale w produkcji znacznik include nie działa i kiedy sprawdzam element, nie pokazuje żadnych elementów z list.html. czy ktoś mógłby w tym pomóc?

Edit: - Moja struktura folderów jest poniżej

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

Dzięki

+0

Jeśli zrób '{% i nclude 'list.html'%} 'w twoim' homepage.html' powinno działać. – Ngenator

+0

Czy "{% include" list.html "%}' działa? – karthikr

+0

Nie. oba powyższe nie działają. Próbowałem podać pełną ścieżkę "templates/list.html" ... nawet to nie działa – Dev

Odpowiedz

15

miałem ten sam problem, ale odpowie na to pytanie w taki sposób, aby inni użytkownicy z podobnym problemem może zrozumieć.

Prawdopodobnie masz jakiś blok szablonu w dołączonym pliku html, ten blok albo oczekuje jakiegoś włącznika, albo powoduje błąd, który wywołuje wyjątek, który django przepuszcza i dlatego nie jesteś w stanie zobacz błąd, , jeśli używasz {% load someLoad %} w szablonie nadrzędnym, a następnie użyj go w dołączonym html, i domyślam się, że to zmienia się z wersji na wersję.

w moim (bardzo specyficzne) przypadku miałem tego brakuje w dołączonego pliku html:

{% load i18n %} 
{% load cms_tags sekizai_tags %} 
+1

to wszystko, brakujący ładunek i18n w dołączonym szablonie ... Ockham nigdy nie zawodzi. – TheBronx

+1

Po prostu miałem podobny problem i prawie oszalałem z tego powodu. co sprawiło, że było to bardziej skomplikowane, to, że stało się to tylko na serwerze produkcyjnym, a nie na moim komputerze. później dowiedziałem się, że ten pasek nawigacyjny, który użyłem na nim, zawiera adresy URL, których nie zmiękczyłem, co spowodowało wiele błędów, ale zostały one wyciszone przez instrukcję include. Dzięki^_^ – Zee

2

prostu miałem podobny problem. Udało mi się go zdiagnozować, tymczasowo kopiując i wklejając html (tj. Navigation.html), który chciałem dołączyć bezpośrednio do strony nadrzędnej (base.html). Wygląda na to, że jeśli w dołączonym html są błędy, to po prostu nie są one odczytywane i nie pojawiają się żadne błędy.

Kod z navigation.html wklejono do base.html Mam błąd 500, ponieważ jeden z nazwanych adresów URL w pliku navigation.html nie ma odwrotności.

1

W przypadku wystąpienia problemu/błędu w szablonie dołączania, domyślnie django nie będzie wyświetlać błędu. Możesz go włączyć za pomocą zmiennej ustawień TEMPLATE_DEBUG = True Następnie będziesz mógł wyświetlić błąd w szablonie podczas próby załadowania tej strony.

W powyższym przypadku może brakować znacznika obciążenia {% load xxx %} w dołączonym szablonie.

+0

W Django 1.8 i późniejszych, powinieneś zamiast tego ustawić 'TEMPLATES [0] [" OPTIONS "] [" debug "]' na 'True'. – Flimm

0

Inna sytuacja, w której obejmują oświadczenie nie powiedzie się bez podnoszenia błąd jest, jeśli pracują w szablonie, który rozciąga się inny, a obejmują jest poza nazwanego bloku:

{% extends "my_base.html" %} 

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

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

W tym przypadku plik2.html nie zostanie uwzględniony, ponieważ nie znajduje się w bloku, a nie otrzymasz żadnych komunikatów ostrzegawczych i spróbujesz różnych rzeczy, zanim zdasz sobie sprawę z tego, co zrobiłeś :-)