【问题标题】:Django - Passing parameters from template to view not workingDjango - 从模板传递参数到视图不起作用
【发布时间】:2015-01-02 20:39:20
【问题描述】:

我正在尝试使用 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 中的“添加朋友”按钮时,它会转到 url.py 并将其映射到带有参数的 views.py 中的函数 addFriend 并从那里发挥它的魔力。但是,它不接受争论。我知道我在 urls.py 中使用正则表达式做错了,但我不确定是什么。任何意见是极大的赞赏。谢谢!

【问题讨论】:

  • 将(&lt;requested_friend&gt;[a-z]*) 更改为(?P&lt;requested_friend&gt;[0-9A-Za-z_\-]+)
  • 谢谢@torm,它现在映射出来了,但是由于某种原因,当我尝试打印请求的朋友时,我什么也没得到。我没有正确接收它吗?

标签: python regex django


【解决方案1】:

当您将 (&lt;requested_friend&gt;[a-z]*) 更改为 (?P&lt;requested_friend&gt;[0-9A-Za-z_\-]+) 时,一切看起来都很好。

但请记住在模式中使用+ 而不是*。 * 也匹配一个空字符串(addFriend// 匹配),但 + 字符串必须至少有一个字符(addFriend// 不匹配)

您可以在网址格式的末尾添加$ r'^addFriend/(?P&lt;requested_friend&gt;[0-9A-Za-z_\-]+)/$' Here 您可以找到原因。

还要检查浏览器中的链接是否有正确的值/events/addFriend/&lt;user_name&gt;/ 可能是{{ user.username }} 有问题

【讨论】:

    【解决方案2】:

    您在 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'),
    

    【讨论】:

    • url(r'^addFriend/(?P[a-z]*)/', views.addFriend, name='addFriend'),我做错了吗?谢谢
    • 您的request_friend 值是否仅由小写字母组成?也许正则表达式不好?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-03-19
    • 2019-02-16
    • 2015-09-18
    • 2015-07-07
    • 2018-02-10
    • 2015-05-23
    • 2020-06-08
    相关资源
    最近更新 更多