从django模板向视图传递变量

kadbb459  于 2023-04-07  发布在  Go
关注(0)|答案(3)|浏览(148)

我正在用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的网址,但我不想暴露一个页面/用户ID的网址。我觉得有一个简单的解决方案,但我还没有想通。
谢谢你的帮助。

ubof19bj

ubof19bj1#

你只能用4种不同的方法从模板发送数据到Django视图。在你的情况下,如果你不想在URL中包含信息,你可能只能使用选项1和4。

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.从URL(例如,请参阅此处)

你会传递//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. Session (via cookie)

使用session的缺点是你必须将它传递给视图或者在更早的时候设置它。

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

# Retrieve the session variable
var = request.session.get('uid')
px9o7tmv

px9o7tmv2#

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

模板:

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

上面,'INI:fbpages'是在www.example.com中定义的url模式名称urls.py
uid是要传递给视图的变量。
请注意,在django模板中变量渲染中使用的双花括号在这里没有使用。

查看:

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

def fbpages(request, fbuser):
..
uz75evzq

uz75evzq3#

我们也这样使用:

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),
]

相关问题