1

我是 Django 新手,我正在尝试制作一个学习日志网站。

当我尝试使用 login_required 函数限制我的主题时,我收到 404 错误。

这是我的代码:

from django.contrib.auth.decorators import login_required   

@login_required(login_url='/users/login/')
def topics(request):
""" Show all topics."""
topics = Topic.objects.order_by("date_added")
context = {"topics": topics}
return render(request, "learning_logs/topics.html", context)

每当我在代码中使用装饰器时,都会出现此错误:

Using the URLconf defined in learning_log.urls, Django tried these URL 
patterns, in this order:

admin/
users/ login [name='login']
users/ logout [name='logout']
users/ registration [name='register']
learning_logs/¨

The current path, users/login/, didn't match any of these. 

url 工作正常,但是当我使用装饰器时它会中断。

4

2 回答 2

0

看起来您的users网址没有尾部斜杠。确保您的 URLSusers/urls.py末尾带有斜杠。例如:

urlpatterns = [
    url(r'^login/$', LoginView.as_view(), name='login')
]
于 2019-02-23T22:06:35.120 回答
0

这意味着你没有在你的 url 中定义 django 内置登录来解决它你可以在你的 urls.py 中过去

##urls.py
    from django.contrib.auth import views as auth_views
    urlpatterns = [
        path('users/login/', auth_views.login, name='login'),
        path('users/logout/', auth_views.logout, name='logout'),
        path('admin/', admin.site.urls),
    ]

如果您已经这样做了,则需要在视图中执行以下操作

##views.py
from django.urls import reverse_lazy
from django.contrib.auth.decorators import login_required   

@login_required(login_url=reverse_lazy("login"))
def topics(request):
""" Show all topics."""
topics = Topic.objects.order_by("date_added")
context = {"topics": topics}
return render(request, "learning_logs/topics.html", context)
于 2019-02-23T22:18:50.630 回答