将变量从django模板传递到视图

Kev*_*ork 18 django

我正在使用django 1.7构建我的第一个站点,并且很难弄清楚如何将变量从点击传递到视图.我的GET也是空的.

我的模板有一个带有Facebook帐户ID的表格,点击后应显示用户管理员的Facebook页面列表.

我的模板:

{% for SocialAccount in accountlist %}
   <tr>
      <td><a href="{% url 'INI:fbpages' %}">{{ SocialAccount.uid }}</a></td>
      <td>{{ SocialAccount.extra_data.first_name }}</td>
      <td>{{ SocialAccount.extra_data.last_name }}</td>
      <td>{{ SocialAccount.extra_data.email }}</td>
   </tr>
{% endfor %}
Run Code Online (Sandbox Code Playgroud)

和我的观点:

def fbpages(request, fbuser):
    djuser = request.user.id
    context = RequestContext(request)
    fbuser = 1234634
    pagelist = facebook.pages(request, djuser, fbuser)
    blocks = {'title': 'Facebook Pages',
          'pagelist': pagelist}
    return render(request, "initiative/ListFBPages.html", blocks)
Run Code Online (Sandbox Code Playgroud)

如果我将ID放在URL中但我不想在URL中公开页面/用户ID,我可以轻松地做到这一点.我觉得这是一个简单的解决方案,但我还没弄清楚.

谢谢你的帮助.

JJK*_*JJK 32

您只能通过4种不同的方法从模板向Django视图发送数据.在您的情况下,如果您不想要URL中的信息,您可能只能使用选项1和4.

由于我是StackOverflow的新手,因此我无法发布超过2个链接,因此如果您搜索以下帖子,您将找到有关每种方法的优缺点的更多信息.

"什么是在django中将变量从模板传递到视图的更有效方法"

1.发布

所以你会提交一份有价值的表格.

    # You can retrieve your code in your views.py via
    request.POST.get('value')
Run Code Online (Sandbox Code Playgroud)

2.查询参数

所以你会传递// localhost:8000 /?id = 123

    # You can retrieve your code in your views.py via
    request.GET.get('id')
Run Code Online (Sandbox Code Playgroud)

3.从URL(参见此处)

所以你会传递// localhost:8000/12/results /

    # urls.py
    urlpatterns = patterns(
        ...
        url(r'^(?P<question_id>\d+)/results/$', views.results, name='results'),
        ...
    )
Run Code Online (Sandbox Code Playgroud)

并在你的意见......

    # views.py
    # To retrieve (question_id)
    def detail(request, question_id):
        ...
        return HttpResponse("blahblah")
Run Code Online (Sandbox Code Playgroud)

4.会话(通过cookie)

使用会话的缺点是你必须将它传递给视图或提前设置它.

https://docs.djangoproject.com/en/1.7/topics/http/sessions/

    # views.py
    # Set the session variable
    request.session['uid'] = 123456

    # Retrieve the session variable
    var = request.session.get['uid']
Run Code Online (Sandbox Code Playgroud)

  • 好答案。虽然我希望你能更具体地介绍方法 1。我正在其他地方寻找有关使用方法 1 的说明,但还没有弄清楚。 (3认同)
  • 您能对第二种方法进行更多扩展吗?更具体地说,如何在模板中设置查询参数(如果是“?...”)? (2认同)