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 错误跟踪的原因。