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

时间:2015-03-19 19:44:02

标签: 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 %}

和我的观点:

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)

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

谢谢你的帮助。

3 个答案:

答案 0 :(得分:30)

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

  

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

     

&#34;将变量从模板传递到视图的更有效方法是什么   在django&#34;

<强> 1。交

所以你要提交一份有价值的表格。

    # You can retrieve your code in your views.py via
    request.POST.get('value')

<强> 2。查询参数

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

    # You can retrieve your code in your views.py via
    request.GET.get('id')

第3。来自网址(例如,请参阅here

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

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

并在您的观点中......

    # views.py
    # To retrieve (question_id)
    def detail(request, question_id):
        ...
        return HttpResponse("blahblah")

<强> 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']

答案 1 :(得分:0)

我们也这样使用:

from django.urls import path
from . import views

urlpatterns = [
       path('articles/2003/', views.special_case_2003),
       path('articles/<int:year>/', views.year_archive),
       path('articles/<int:year>/<int:month>/', views.month_archive),
       path('articles/<int:year>/<int:month>/<slug:slug>/', views.article_detail),
]

答案 2 :(得分:0)

要补充JJK的答案,以下是使用表单将变量从模板传递到视图的详细方法。

模板:

<form action="{% url 'INI:fbpages' SocialAccount.uid %}" method="post">
..
</form>

上面,“ INI:fbpages”是在urls.py中定义的网址格式名称

SocialAccount.uid是要传递给视图的变量。

请注意,此处未使用在django模板中的变量渲染中使用的双花括号。

查看:

该变量可以作为fbuser命令参数直接在视图中访问

def fbpages(request, fbuser):
..