我正在使用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,我可以轻松地做到这一点。我觉得这是一个简单的解决方案,但我还没弄清楚。
谢谢你的帮助。
答案 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):
..