【问题标题】:Django: Passing object from template to viewsDjango:将对象从模板传递到视图
【发布时间】:2017-04-26 03:27:58
【问题描述】:

我想使用相同的模板来查看有关我的每个数据库对象的信息。我希望能够单击列表中的每个元素并将其链接到包含有关它的信息的页面。我认为有一种比为每个唯一对象创建视图更简单的方法。

我在 list.html 中列出了我的所有数据库对象,如下所示:

{% for instance in object_info %}
    <li><a href="object">{{ instance.name }}</a></li>
{% endfor %}

我的views.py有这个视图:

def object_view(request):
    data = Object.objects.filter(name="")
    context={
    'object_info':data
    }
    return render(request, "object.html", context)

我可以将每个 {{ instance.name }} 传递给视图并将其用作过滤器的变量吗?

【问题讨论】:

    标签: django django-templates django-views


    【解决方案1】:

    好的,首先永远不要这样做:

    data = Object.objects.filter(name="")
    

    Django 有一个all() 函数,它将返回所有对象:

    data = Object.objects.all()
    

    其次,我希望object_viewdataobject_infoobject.html 不是您的实际变量名!如果是这样,请确保它们对您的应用有意义。

    好的,回到你的问题。好吧,您不需要为每个对象创建一个视图。我假设&lt;a href="object"&gt;...&lt;/a&gt; 应该引用一个将填充所选对象的新页面。

    如果是这样,您可能希望在&lt;a&gt; 标记中包含这样的网址:/objects/object_id/

    这个新的url需要在urls.py中这样定义:

    urlpatterns += [
        url(r'^objects/(?P<oid>[0-9]+)/$', views.object_specific_view, name='objects'),
    ]
    

    注意oid url 参数。我们将使用它来访问我们的特定对象。

    现在您的原始模板list.html 应如下所示:

        {% for instance in object_info %}
             <li><a href="{% url 'objects' oid = instance.id %}">instance.name</a></li>
        {% endfor %}
    

    我们将instance.id 提供给oid url 参数以生成objects/1/objects/2/ 等内容。

    现在,这意味着您只需要使用另一个模板再创建一个视图。

    你的第二个视图object_specific_view

    def object_specific_view(request, oid): # The url argument oid is automatically supplied by Django as we defined it carefully in our urls.py
        object = Object.objects.filter(id=oid).first()
        context={
          'object':object
        }
        return render(request, "specific_object.html", context)
    

    现在您只需要设计您的specific_object.html 并访问object 实例以显示特定对象的详细信息:)。

    【讨论】:

      猜你喜欢
      • 2016-09-28
      • 2013-04-10
      • 2015-09-18
      • 2015-07-07
      • 2018-02-10
      • 2014-03-26
      • 2017-05-04
      • 1970-01-01
      • 2020-03-19
      相关资源
      最近更新 更多