我是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工作正常,但是当我使用装饰器时,URL会中断。
答案 0 :(得分:0)
您的users
网址似乎没有斜杠。确保users/urls.py
中的URL以斜杠结尾。例如:
urlpatterns = [
url(r'^login/$', LoginView.as_view(), name='login')
]
答案 1 :(得分: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)