Почему Джанго не может продлить мою form.html страница контакта и возвращает ошибку TemplateSyntaxError или возникшее исключение?

#python #django

Вопрос:

Я пытаюсь создать страницу контактов («/contact-us/») в виде модульного приложения вместо аналогичной уже работающей страницы контактов («/контакт/»), расположенной в каталоге «/app/». Первое не удается, возвращая либо исключение, либо ошибку TemplateSyntaxError при попытке {% расширяет %} form.html с его base.html.

Моя файловая структура:

 BlogDjango
|-BlogDjango
| | settings.py
| | urls.py
|-app
| |-Templates
| | | base.html
| | | form.html
|-blogpost
|-contactform
| |-Templates
| | | base.html
| | | form.html
| | forms.py
| | views.py
 

settings.py

 TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [os.path.join(BASE_DIR, 'templates'),os.path.join(BASE_DIR,'app','templates'),os.path.join(BASE_DIR,'contactform','templates')],...
 

base.html

 <!DOCTYPE html>
<html>
<head></head>
<body>
{% block content %}{% endblock %}
</body></html>
 

form.html

 {% extends base.html %}

{% block content %}
{% if title %}
    <h1>{{ title }}</h1>
{% endif %}

<form method='POST' action='.'> {% csrf_token %}
    {{ form.as_p }}
    <button type='submit'>Send</button>
</form>

{% endblock %}
 

Похоже, что Джанго не осознает, что base.html находится в том же каталоге, что и form.html и поэтому его нельзя продлевать.
Поэтому я получаю эти две ошибки, брошенные мне:

 Exception Thrown:
    Failed lookup for key [base] in [{'True': True, 'False': False, 'None': None}, {'csrf_token': <SimpleLazyObject: <function csrf.<locals>._get_val at 0x000001D62DDBBAF0>>, 'request': <WSGIRequest: GET '/contact-us/'>, 'user': <SimpleLazyObject: <function AuthenticationMiddleware.process_request.<locals>.<lambda> at 0x000001D62DCDDAF0>>, 'perms': <django.contrib.auth.context_processors.PermWrapper object at 0x000001D62DC88100>, 'messages': <django.contrib.messages.storage.fallback.FallbackStorage object at 0x000001D62DC82670>, 'DEFAULT_MESSAGE_LEVELS': {'DEBUG': 10, 'INFO': 20, 'SUCCESS': 25, 'WARNING': 30, 'ERROR': 40}}, {}, {'form': <ContactForm bound=False, valid=Unknown, fields=(full_name;email;content)>}]
 

Или:

 TemplateSyntaxError at /contact-us/
Could not parse the remainder: '/templates/base.html' from '/templates/base.html'
 

Поэтому мой вопрос таков:

Почему Django не удается расширить form.html с base.html когда он работает в другом каталоге?

Комментарии:

1. Укажите имя шаблона, поэтому: {% extends "base.html" %}

Ответ №1:

Вы пытаетесь написать extends тег шаблона как:

 {% extends base.html %}
 

Здесь вы не указали base.html , что означает, что это поиск переменной, поэтому Django пытается найти base в контексте, и поскольку такой переменной нет, это не удается. Затем он выдает ошибку, потому что ему нужна эта переменная для расширения правильного шаблона. Вам нужно указать имя шаблона в кавычках, чтобы оно считалось строкой:

 {% extends "base.html" %}
 

Комментарии:

1. Спасибо, теперь это работает! Я перепробовал так много вещей, что забыл проверить самую простую…