在dashboar.html中,我扩展了base.html,它会在/ lab /中弹出TemplateDoesNotExist的错误,如果我输出{%extends“base.html”%},它可以正常工作,我的base.html确实存在问题。
这是我的目录
mysite/
lab/
templates/
lab/
base.html
dashboard.html
details/
index.html
login.html
__init__.py
# views.py; models.py etc.
base.html文件
<div id="header">
<span class="logo">Bookmarks</span>
{% if request.user.is_authenticated %} <ul class="menu">
<li {% if section =="dashboard" %}class="selected"{% endif %}>
<a href="{% url 'dashboard' %}">My dashboard</a>
</li>
<li {% if section =="images" %}class="selected"{% endif %}>
<a href="#">Images</a>
</li>
<li {% if section =="people" %}class="selected"{% endif %}>
<a href="#">People</a>
</li> </ul> {% endif %}
<span class="user">
{% if request.user.is_authenticated %}
Hello {{ request.user.first_name }},
<a href="{% url 'logout' %}">Logout</a>
{% else %}
<a href="{% url 'login' %}">Log-in</a>
{% endif %}
</span>
</div>
dashboard.html
{% extends "base.html" %}
{% block title %}Dashboard{% endblock %}
{% block content %}
<h1>Dashboard</h1>
<p>Welcome to your dashboard.</p>
{% endblock %}
views.py
from django.shortcuts import render
from django.http import HttpResponse
from django.contrib.auth import authenticate, login
from .forms import LoginForm
from django.contrib.auth.decorators import login_required
from .models import User, Device
def lab_list(request):
return render(request, 'lab/details/index.html')
def user_login(request):
if request.method == 'POST':
form = LoginForm(request.POST)
if form.is_valid():
cd = form.cleaned_data
user = authenticate(username=cd['username'],
password=cd['password'])
if user is not None:
if user.is_active:
login(request, user)
return HttpResponse('Authenticated '' Successfully')
else:
return HttpResponse('Disabled account')
else:
return HttpResponse('Invalid login')
else:
form = LoginForm()
return render(request, 'lab/details/login.html', {'form': form})
@login_required
def dashboard(request):
return render(request, 'lab/dashboard.html', {'section': 'dashboard'})
登记/ login.html的
{% extends "lab/base.html" %}
{% block content %}
<h1>Log-in</h1>
{% if form.errors %}
<p>
your username and password didn't match.
Please try again.
</p>
{% else %}
<p>Please, use the following from to log-in</p>
{% endif %}
<div class="login-form">
<form action="{% url 'login' %}" method="post">
{{ form.as_p }}
{% csrf_token %}
<input type="hidden" name="next" value="{{ next }}" />
<p><input type="submit" value="Log-in"></p>
</form>
</div>
{% endblock %}
登记/ logged_out.html
{% extends "lab/base.html" %}
{% block title %}Logged out{% endblock %}
{% block content %}
<h1>Logged out</h1>
<p>You have been successfully logged out. You can <a href="{% url 'login' %}">log-in again</a>.</p>
{% endblock %}
模板/实验室/ details.html
{% extends "lab/base.html" %}
{% block title %}
Login
{% endblock %}
{% block content %}
<h1>Log-in</h1>
<form action="." method="post">
{{ form.as_p }}
{% csrf_token %}
<input type="submit" value="登陆">
</form>
{% endblock %}
urls.py
from django.conf.urls import url
from . import views
from django.contrib.auth.views import login, logout, logout_then_login
urlpatterns = [
# post views
url(r'^login/$', login, name='login'),
url(r'^logout/$', logout, name='logout'),
url(r'^logout-then-login/$', logout_then_login, name='logout_then_login'),
url(r'^$', views.dashboard, name='dashboard'),
]
更新
我已经在settings.py
中添加了以下内容LOGIN_REDIRECT_URL = reverse_lazy('dashboard')
LOGIN_URL = reverse_lazy('login')
LOGOUT_URL = reverse_lazy('logout')
答案 0 :(得分:1)
解决方案:像这样扩展基本模板:{% extends 'lab/base.html' %}
<强>解释强>
如果你只写{% extends 'base.html' %}
,Django会在lab/templates/
中寻找base.html。但是这个目录中没有任何内容。
实际上,base.html位于lab/templates/lab/
目录中。这就是为什么,您需要指定包含base.html