Django URL / Views额外参数

时间:2013-11-22 22:35:32

标签: django django-views django-urls

Django1.6 中,有没有办法将动态参数传递给我的视图或URL而无需解析URL?

理想情况下,我想要一个看起来像的urls.py:

url(r'^dash/$',
    dash_view.account_modify,
    {'account': **dynamic_account_identifier_here**}
    name='dash_account_modiy')

在views.py中:

def account_modify(request, account, 
                   template_name='profile.html, 
                   change_form=AccountModifyForm):
    ...

:param帐户:
来自模特:

class Dash(models.Model):
    name = models.Charfield()
    account = models.IntegerField()
    ....

基本上,我真的想避免使用帐户标识符作为字符串一部分的urls.py,例如:

url(r'^dash/(?P<account>\w+)/$',
    dash_view.account_modify,
    name='dash_account_modiy')

有关如何将这些值从模板传递到处理视图以便在AccountModifyForm(期望'account'参数)中使用的任何建议?

2 个答案:

答案 0 :(得分:3)

url(r'^dash/$',
    dash_view.account_modify,
    {'account': **dynamic_account_identifier_here**}
    name='dash_account_modify')

您无法动态评估其中的任何内容,因为在加载URL conf时,只会对字典进行一次评估。

如果您想将信息从一个视图传递到另一个视图,则有三个选项:

  • 在网址中,您似乎不想这样做
  • 作为GET或POST数据
  • 将其存储在一个视图中的会话中,并从下一个
  • 中的会话中检索它

答案 1 :(得分:1)

如果有人关心......想出来......

在模板中:

{% for dash in dashes %}
     blah blah blah
     <form action="..." method="POST">
         <input type="hidden" name="id" value="{{ dash.account }}">
         {{ form.as_ul }}
         <input type="submit" value="Do stuff">
     </form>
{% endfor %}

在视图中:

if request.method == 'POST'
    account = request.POST['id']
    # be sure to include checks for the validity of the POST information
    # e.g. confirm that the account does indeed belong to whats-his-face
    form = AccountModifyForm(request.POST, account,
                             user=request.user)
    ....