Django:将对象从模板传递到视图 [英] Django: Passing object from template to views

查看:38
本文介绍了Django:将对象从模板传递到视图的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I want to use the same template to view information about each of my database objects. I would like to be able to click on each element in the list and have it link me to a page with info about it. I'm thinking there's an easier way than making a view for each unique object.

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

I'm listing all of my database objects on my list.html like this:

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

我的views.py具有此视图:

My views.py has this view:

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

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

Can I pass each {{ instance.name }} to the view and use that as a variable for my filter?

推荐答案

首先,永远不要这样做:

Okay first off never do this:

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

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

Django has an all() function that will return all objects:

data = Object.objects.all()

第二,我希望 object_view data object_info object.html 不是您的实际变量名!如果是这样,请确保它们对您的应用程序有意义.

Secondly, I hope object_view, data, object_info, object.html are not your actual variable names! If so, please make sure they are meaningful to your application.

好,回到您的问题上.好了,您不需要为每个对象都创建一个视图.我假设< a href ="object"> ...</a> 应该引用将填充所选对象的新页面.

Okay back to your problem. Well, you don't need to make a view for every single object. I am assuming that <a href="object">...</a> should refer to a new page that will be populated with the selected object.

如果是这样,您可能希望在< a> 标记中包含以下网址:/objects/object_id/.

If so, you would want to have urls in the <a> tags like this: /objects/object_id/.

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

This new url needs to be defined like this in urls.py:

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

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

Note the oid url argument. We will be using it to access our specific object.

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

Now your original template, list.html, should look like:

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

在向 oid url参数提供 instance.id 的地方,生成类似 objects/1/ objects/2/

Where we supply instance.id to oid url argument to produce something like objects/1/ or objects/2/ etc.

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

Now, this means that you will only need to create one more view with another template.

您的第二个视图 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 实例以显示特定对象的详细信息即可:).

Now you just need to design your specific_object.html and access the object instance to show details of a specific object :).

这篇关于Django:将对象从模板传递到视图的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆