Django URL 不呈现模板
Django URL not rendering templates
django 没有将我引导至页面,而是简单地返回以下错误:
“C:\Users\RodrigoPinto\Desktop\Insider\users\register” does not exist
这是我的 url;
from django.urls import path
from users import employee_views
from users import views as auth_views
from django.contrib.auth.views import LoginView, LogoutView
app_name = 'users'
urlpatterns = [
path('login/', LoginView.as_view(template_name='users/login.html')),
path('logout/', LogoutView.as_view(template_name='users/logout.html'), name='logout'),
path('register/', auth_views.Register.as_view, name='register'),
path('profile/', auth_views.Profile.as_view, name='profile'),
path('listView/', employee_views.AccountsListView.as_view, name='listView'),
path('update/<pk>/', employee_views.AccountsUpdate.as_view, name='updateView'),
path('password_update/<pk>/', employee_views.update_password, name='password_update'),
path('delete/<pk>/', employee_views.AccountsDelete.as_view, name='deleteView'),
]
在主应用程序上,我在 URL;
中有这个
from django.contrib import admin
from django.urls import path, include
from django.conf import settings
from django.conf.urls.static import static
from users import urls as user_urls
app_name = "inside"
urlpatterns = [
path('admin/', admin.site.urls),
path('', include('inside.urls')),
path('users/', include(user_urls)),
]
if settings.DEBUG:
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
过去两个小时我一直在研究这段代码,但我无法理解我做错了什么。也许有人能看到我遗漏的东西。
我在settings里面的模板目录也是这样配置的;
template_dir = [
os.path.join(BASE_DIR, 'users', 'templates'),
os.path.join(BASE_DIR, 'forums', 'templates'),
]
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': template_dir,
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
]
views.py;
from django.urls import reverse_lazy
from .forms import UserCreateForm
from django.views.generic import CreateView, TemplateView
from django.contrib.messages.views import SuccessMessageMixin
from django.contrib.auth.mixins import LoginRequiredMixin
class Register(SuccessMessageMixin, CreateView):
form_class = UserCreateForm
success_url = reverse_lazy('users:login')
template_name = 'users/register.html'
success_message = 'Your Account has been created!'
class Profile(LoginRequiredMixin, TemplateView):
template_name = 'users/profile.html'
单独的文件以保持代码更清晰 employee_views.py;
from django.views.generic import TemplateView, ListView, UpdateView, DeleteView
from django.contrib.messages.views import SuccessMessageMixin
from django.contrib.auth.decorators import login_required
from django.contrib.auth.mixins import LoginRequiredMixin
from django.contrib.messages import error, success
from django.shortcuts import redirect, reverse
from django.urls import reverse_lazy
from django.shortcuts import render
from .models import User
@login_required()
def update_password(request, pk):
if request.method == "POST":
form_data = request.POST
if form_data['password1'] == form_data['password2'] and len(form_data['password1']) > 7:
u = User.objects.get(pk=pk)
u.set_password(form_data['password1'])
success(request, "Your Password has been updated!")
u.save()
return redirect(reverse('users:listView'))
else:
error(request, "Please check your passwords!")
return render(request, "users/users/change_password.html", context={'pk': pk})
return render(request, "users/users/change_password.html", context={'pk': pk})
class Profile(LoginRequiredMixin, TemplateView):
template_name = 'users/profile.html'
class AccountsListView(LoginRequiredMixin, ListView):
model = User
paginate_by = 15
template_name = "users/profile.html"
class AccountsUpdate(LoginRequiredMixin, SuccessMessageMixin, UpdateView):
model = User
fields = ('username',
'first_name',
'last_name',
'email',
'image',
'is_admin',
'is_supervisor',
)
template_name = 'user_update_form.html'
success_url = reverse_lazy('users:listView')
class AccountsDelete(LoginRequiredMixin, DeleteView):
model = User
success_url = reverse_lazy('users:listView')
template_name = 'users/user_confirm_delete.html'
如果您使用基于 class 的通用视图,您需要具有这样的结构
app_name
|
|--templates
|
| -- app_name
|
|--register.html
如果错误发生在登录 url,它会在指定模板中查找 register.html。
问题是 99% 确定在这个陈述中:
if settings.DEBUG:
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
我想在你的settings.py中你有类似
的东西
MEDIA_URL = '/users/register/'
MEDIA_ROOT = 'C:/....../register'
您访问“127.0.0.1:8000/users/register/,static(...) 捕获请求并准确生成您收到的错误消息。
这也是您没有获得通常详细的 Django 错误跟踪的原因。
django 没有将我引导至页面,而是简单地返回以下错误:
“C:\Users\RodrigoPinto\Desktop\Insider\users\register” does not exist
这是我的 url;
from django.urls import path
from users import employee_views
from users import views as auth_views
from django.contrib.auth.views import LoginView, LogoutView
app_name = 'users'
urlpatterns = [
path('login/', LoginView.as_view(template_name='users/login.html')),
path('logout/', LogoutView.as_view(template_name='users/logout.html'), name='logout'),
path('register/', auth_views.Register.as_view, name='register'),
path('profile/', auth_views.Profile.as_view, name='profile'),
path('listView/', employee_views.AccountsListView.as_view, name='listView'),
path('update/<pk>/', employee_views.AccountsUpdate.as_view, name='updateView'),
path('password_update/<pk>/', employee_views.update_password, name='password_update'),
path('delete/<pk>/', employee_views.AccountsDelete.as_view, name='deleteView'),
]
在主应用程序上,我在 URL;
中有这个from django.contrib import admin
from django.urls import path, include
from django.conf import settings
from django.conf.urls.static import static
from users import urls as user_urls
app_name = "inside"
urlpatterns = [
path('admin/', admin.site.urls),
path('', include('inside.urls')),
path('users/', include(user_urls)),
]
if settings.DEBUG:
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
过去两个小时我一直在研究这段代码,但我无法理解我做错了什么。也许有人能看到我遗漏的东西。
我在settings里面的模板目录也是这样配置的;
template_dir = [
os.path.join(BASE_DIR, 'users', 'templates'),
os.path.join(BASE_DIR, 'forums', 'templates'),
]
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': template_dir,
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
]
views.py;
from django.urls import reverse_lazy
from .forms import UserCreateForm
from django.views.generic import CreateView, TemplateView
from django.contrib.messages.views import SuccessMessageMixin
from django.contrib.auth.mixins import LoginRequiredMixin
class Register(SuccessMessageMixin, CreateView):
form_class = UserCreateForm
success_url = reverse_lazy('users:login')
template_name = 'users/register.html'
success_message = 'Your Account has been created!'
class Profile(LoginRequiredMixin, TemplateView):
template_name = 'users/profile.html'
单独的文件以保持代码更清晰 employee_views.py;
from django.views.generic import TemplateView, ListView, UpdateView, DeleteView
from django.contrib.messages.views import SuccessMessageMixin
from django.contrib.auth.decorators import login_required
from django.contrib.auth.mixins import LoginRequiredMixin
from django.contrib.messages import error, success
from django.shortcuts import redirect, reverse
from django.urls import reverse_lazy
from django.shortcuts import render
from .models import User
@login_required()
def update_password(request, pk):
if request.method == "POST":
form_data = request.POST
if form_data['password1'] == form_data['password2'] and len(form_data['password1']) > 7:
u = User.objects.get(pk=pk)
u.set_password(form_data['password1'])
success(request, "Your Password has been updated!")
u.save()
return redirect(reverse('users:listView'))
else:
error(request, "Please check your passwords!")
return render(request, "users/users/change_password.html", context={'pk': pk})
return render(request, "users/users/change_password.html", context={'pk': pk})
class Profile(LoginRequiredMixin, TemplateView):
template_name = 'users/profile.html'
class AccountsListView(LoginRequiredMixin, ListView):
model = User
paginate_by = 15
template_name = "users/profile.html"
class AccountsUpdate(LoginRequiredMixin, SuccessMessageMixin, UpdateView):
model = User
fields = ('username',
'first_name',
'last_name',
'email',
'image',
'is_admin',
'is_supervisor',
)
template_name = 'user_update_form.html'
success_url = reverse_lazy('users:listView')
class AccountsDelete(LoginRequiredMixin, DeleteView):
model = User
success_url = reverse_lazy('users:listView')
template_name = 'users/user_confirm_delete.html'
如果您使用基于 class 的通用视图,您需要具有这样的结构
app_name
|
|--templates
|
| -- app_name
|
|--register.html
如果错误发生在登录 url,它会在指定模板中查找 register.html。
问题是 99% 确定在这个陈述中:
if settings.DEBUG:
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
我想在你的settings.py中你有类似
的东西MEDIA_URL = '/users/register/'
MEDIA_ROOT = 'C:/....../register'
您访问“127.0.0.1:8000/users/register/,static(...) 捕获请求并准确生成您收到的错误消息。
这也是您没有获得通常详细的 Django 错误跟踪的原因。