Django - 从模板传递参数到视图不工作
Django - Passing parameters from template to view not working
我正在尝试使用 django 并开始尝试创建自己的项目。我目前无法在不使用 POST 请求的情况下将参数从我的模板传递到我的视图。
这是我在模板中的代码
#in main.html
<div>
{{ event_results }}
{{ friends }}
</div>
{% for user in results %}
<div class="userblock">
<p class="user">{{ user.username }}</p>
<a href="/events/addFriend/{{user.username}}">
<button class="navbuttons" id="addfriend">Add as friend</button>
<a/>
</div>
{% endfor %}
#in urls.py
from django.conf.urls import patterns, url
from events import views, eventview
url(r'^addFriend/(<requested_friend>[a-z]*)/', views.addFriend, name='addFriend'),
)
#in views.py
def addFriend(request, requested_friend):
currentUser = User.objects.get(username=request.session['username'])
try:
list_of_friends = Friends.objects.get(username=currentUser)
except (KeyError, Friends.DoesNotExist):
return render(request, 'events/main.html', {'friends': requested_friend})
else:
return render(request, 'events/main.html', {'friends':list_of_friends})
因此,当我单击 main.html 中的按钮 "Add friend" 时,它会转到 url.py 并使用参数将其映射到 views.py 中的函数 addFriend 和从那里开始发挥它的魔力。但是,它没有接受争论。我知道我在使用正则表达式的 urls.py 中做错了,但我不确定是什么。任何意见是极大的赞赏。谢谢!
您在 urls.py 中有错误。在命名组模式中,您错过了 ?P
前缀。参见 doc for reference。
而不是
url(r'^addFriend/(<requested_friend>[a-z]*)/', views.addFriend, name='addFriend'),
应该是:
url(r'^addFriend/(?P<requested_friend>[a-z]*)/', views.addFriend, name='addFriend'),
当您将 (<requested_friend>[a-z]*)
更改为 (?P<requested_friend>[0-9A-Za-z_\-]+)
时,一切看起来都很好。
但请记住在模式中使用 +
而不是 *
。 *
也匹配一个空字符串(addFriend//
匹配)但是 +
字符串必须至少有一个字符(addFriend//
不匹配)
您可以在 url 模式的末尾添加 $
r'^addFriend/(?P<requested_friend>[0-9A-Za-z_\-]+)/$'
Here 您可以找到原因。
还要检查浏览器中的 link 是否有正确的值 /events/addFriend/<user_name>/
也许 {{ user.username }}
有问题
我正在尝试使用 django 并开始尝试创建自己的项目。我目前无法在不使用 POST 请求的情况下将参数从我的模板传递到我的视图。
这是我在模板中的代码
#in main.html
<div>
{{ event_results }}
{{ friends }}
</div>
{% for user in results %}
<div class="userblock">
<p class="user">{{ user.username }}</p>
<a href="/events/addFriend/{{user.username}}">
<button class="navbuttons" id="addfriend">Add as friend</button>
<a/>
</div>
{% endfor %}
#in urls.py
from django.conf.urls import patterns, url
from events import views, eventview
url(r'^addFriend/(<requested_friend>[a-z]*)/', views.addFriend, name='addFriend'),
)
#in views.py
def addFriend(request, requested_friend):
currentUser = User.objects.get(username=request.session['username'])
try:
list_of_friends = Friends.objects.get(username=currentUser)
except (KeyError, Friends.DoesNotExist):
return render(request, 'events/main.html', {'friends': requested_friend})
else:
return render(request, 'events/main.html', {'friends':list_of_friends})
因此,当我单击 main.html 中的按钮 "Add friend" 时,它会转到 url.py 并使用参数将其映射到 views.py 中的函数 addFriend 和从那里开始发挥它的魔力。但是,它没有接受争论。我知道我在使用正则表达式的 urls.py 中做错了,但我不确定是什么。任何意见是极大的赞赏。谢谢!
您在 urls.py 中有错误。在命名组模式中,您错过了 ?P
前缀。参见 doc for reference。
而不是
url(r'^addFriend/(<requested_friend>[a-z]*)/', views.addFriend, name='addFriend'),
应该是:
url(r'^addFriend/(?P<requested_friend>[a-z]*)/', views.addFriend, name='addFriend'),
当您将 (<requested_friend>[a-z]*)
更改为 (?P<requested_friend>[0-9A-Za-z_\-]+)
时,一切看起来都很好。
但请记住在模式中使用 +
而不是 *
。 *
也匹配一个空字符串(addFriend//
匹配)但是 +
字符串必须至少有一个字符(addFriend//
不匹配)
您可以在 url 模式的末尾添加 $
r'^addFriend/(?P<requested_friend>[0-9A-Za-z_\-]+)/$'
Here 您可以找到原因。
还要检查浏览器中的 link 是否有正确的值 /events/addFriend/<user_name>/
也许 {{ user.username }}