首页 > 解决方案 > 我在使用 @login_required 装饰器时遇到错误,它在 /accounts/login/ 处显示 TemplateDoesNotExist

问题描述

我正在尝试在我的项目中使用登录装饰器,但是当我使用它时它向我显示错误

TemplateDoesNotExist at /accounts/login/

registration/login.html

网址.py

path('', login.login_view , name='login'),
path('fileupload/', FileUpload.fileup, name='fileupload'),

view.py->FileUpload.py->fileup

@login_required(login_url='login')
def fileup(request):
    if request.method == 'POST':
        form = DocumentForm(request.POST, request.FILES)

        if form.is_valid():
            form = form.save(commit=False)
            form.user = request.user
            form.save()
            print(form.image)
            print(form.user_id)
            send_message(str(form.image), form.user_id)

            text_filename = 'media/' + str(form.image).rstrip('.jpg') + '.txt'
            form.text_file = text_filename
            print(str(form.text_file))
            form.save()
            with open(text_filename, 'r+') as file:
                new_text = file.read()

            return render(request, "pd/NewText.html", {
                'form': form,
                'new_text': new_text,
            })
    else:
        form = DocumentForm()
    return render(request, 'pd/FileUpload.html', {'form': form})

我想如果用户尚未登录并尝试访问该 url fileupload\,那么在他/她尚未登录之前它不允许。

标签: pythondjangologindecorator

解决方案


这就是你想要的。

# Create your views here.
def post_create(request):
    if not request.user.is_staff or not request.user.is_superuser:
        raise Http404
    form = PostForm(request.POST or None, request.FILES or None)
    if form.is_valid():
        instance = form.save(commit=False)
        instance.save()
        messages.success(request, "Succefully Created")
        return HttpResponseRedirect(instance.get_absolute_url())

    context = {
        "form": form,
    }
    return render(request, "post_form.html", context)

这是官方文档,因此您可以探索您的选择

您不需要装饰器,只需在您的视图中放入 if 语句来检查用户是否是成员或其他东西,如果不是则引发错误。

这里还有关于创建登录功能的 Mozilla Django 教程

还要确保您的模板位于正确的路径中。


推荐阅读