gpt4 book ai didi

python - django 在 View 和模板中使用 url 参数

转载 作者:行者123 更新时间:2023-12-01 09:12:52 26 4
gpt4 key购买 nike

我正在使用 Django 2.1+ 和 Python 3.6+。

在我的 urls.py 中,我有这个网址:

url('^member/(?P<username>[\w\-]+)/$', views.Member, name='member_data'),

单独这个工作:

但是从这两个角度来看:

def login(request):
email = request.POST['email']
password = request.POST['password']
username = User.objects.get(email=email)
user = authenticate(request, username=username.username, password=password)
if user is not None:
auth_login(request, user)
# Redirect to a success page.
return reverse('member_data', {'username': username.username})
else:
# Return an 'invalid login' error message.
return redirect('login_page', {'error': 1})

以及来自模板(请注意,这是一个硬编码用户名,用于尝试使模板正常工作):

<a href="{% url 'member_data' username='cheng' %}"><i class="ion ion-person"></i>My Service Record</a>

导致错误的参数错误,我无法解决该错误。像这样,这里的任何智慧都将不胜感激。有没有一种方法可以读取这两个链接?

我开始的错误来自登录尝试:

Environment:


Request Method: POST
Request URL: http://127.0.0.1:8000/login_action/

Django Version: 2.1b1
Python Version: 3.6.3
Installed Applications:
['django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'mptt',
'svcrecord']
Installed Middleware:
['django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware']



Traceback:

File "/Users/sinistersparrow/venv/lib/python3.6/site-packages/django/core/handlers/exception.py" in inner
34. response = get_response(request)

File "/Users/sinistersparrow/venv/lib/python3.6/site-packages/django/core/handlers/base.py" in _get_response
126. response = self.process_exception_by_middleware(e, request)

File "/Users/sinistersparrow/venv/lib/python3.6/site-packages/django/core/handlers/base.py" in _get_response
124. response = wrapped_callback(request, *callback_args, **callback_kwargs)

File "/Users/sinistersparrow/PycharmProjects/ifthqcom/svcrecord/views.py" in login
36. return reverse('member_data', {'username': username.username})

File "/Users/sinistersparrow/venv/lib/python3.6/site-packages/django/urls/base.py" in reverse
30. resolver = get_resolver(urlconf)

Exception Type: TypeError at /login_action/
Exception Value: unhashable type: 'dict'

这是直接进入页面时的错误:

更新 #1...

该模板现在似乎可以正常工作。仍在处理 View 。谢谢

最佳答案

reverse(..) [Django-doc]参数具有签名:

reverse(viewname, urlconf=None, args=None, <b>kwargs=None</b>, current_app=None

现在当然是我们感兴趣的 kwargs 了。但是调用如下:

return reverse('member_data', {'username': username.username})

我们实际上将字典传递给urlconf参数,而这不需要字典。

但是,我们可以将其传递给 kwargs 参数,方法是将其传递给命名参数,例如:

return reverse('member_data', <b>kwargs=</b>{'username': username.username}))

您还需要将其包装在 redirect(..) 将浏览器重定向到此 URL:

return <b>redirect(</b>reverse('member_data', kwargs={'username': username.username}))<b>)</b>

但是 Django 接受 redirect(..) 也直接包含 View (名称)和参数,例如:

return redirect('member_data'<b>, username=username.username</b>)

关于python - django 在 View 和模板中使用 url 参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51505623/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com