#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. Спасибо, теперь это работает! Я перепробовал так много вещей, что забыл проверить самую простую…