如何解决Django URL 不呈现模板
“C:\Users\RodrigoPinto\Desktop\Insider\users\register”不存在
这是我的网址;
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)
过去两个小时我一直在阅读这段代码,但我不明白我做错了什么。也许有人可以看到我遗漏的东西。
我在设置中的模板目录也是这样配置的;
template_dir = [
os.path.join(BASE_DIR,'users','templates'),os.path.join(BASE_DIR,'forums',]
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,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'
解决方法
如果您使用基于通用类的视图,您需要具有这样的结构
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 错误跟踪的原因。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。