Django:如何将对象/对象id传递给另一个模板

Django:如何将对象/对象id传递给另一个模板,django,Django,我是Django web框架的新手 我有一个显示所有对象列表的模板。我将所有单独的对象作为链接(对象标题)列出,单击该链接,我希望重定向到另一个页面,该页面显示该特定对象的对象详细信息。 我可以列出对象,但无法将对象/对象id转发到下一个模板以显示详细信息 views.py def list(request): listings = listing.objects.all() return render_to_response('/../templates/listings.ht

我是Django web框架的新手

我有一个显示所有对象列表的模板。我将所有单独的对象作为链接(对象标题)列出,单击该链接,我希望重定向到另一个页面,该页面显示该特定对象的对象详细信息。 我可以列出对象,但无法将对象/对象id转发到下一个模板以显示详细信息

views.py

def list(request):
    listings = listing.objects.all()
    return render_to_response('/../templates/listings.html',{'listings':listings})

def detail(request, id):
    #listing = listing.objects.filter(owner__vinumber__exact=vinumber)
    return render_to_response('/../templates/listing_detail.html')
和模板如下: list.html

{% for listing in object_list %}
<!--<li> {{ listing.title }} </li>-->
<a href="{{ listing.id }}">{{ listing.title}}</a><br>
{% endfor %}

render_to_response
字典中传递的变量是最终在模板中的变量。因此,在
detail
中,您需要添加类似
{'listing':MyModel.objects.get(id=vinumber)}
,然后模板应该是
{{listing.id}
。但是如果ID不存在,它会崩溃,所以最好使用

此外,您的模板在
对象列表
上循环,但视图传入
列表
——其中一个必须与您所说的不同,如果它当前正在工作

此外,您应该在您的模型上使用和/或
get_absolute\u url
:而不是直接说
href=“{{{listing.id}}”
,而是说
href=“{%url listing details listing.id%}”
,其中
listing details
url.py
中的视图名称。更好的方法是在模型中添加一个;然后您可以只说
href=“{{listing.get_absolute_url}}”
,这样可以更容易地更改url结构,使其看起来更好,或者使用其中的数据库id以外的属性。

您应该检查。它使您能够根据URL模式和相应的view_函数为模型生成链接

例如:

# example model
class Example(models.Model):
    name = models.CharField("Name", max_length=255, unique=True)
    #more model fields here

    #the permalink decorator with get_absolute_url function
    @models.permalink
    def get_absolute_url(self):
        return ('example_view', (), {'example_name': self.name})

#example view
   def example_view(request, name, template_name):
        example = get_object_or_404(Example, name=name)
        return render_to_response(template_name, locals(),
                              context_instance=RequestContext(request))

   #example urls config
       url(r'^(?P<name>[-\w]+)/$', 'example_view', {'template_name': 'example.html'}, 'example_view')
#示例模型
类示例(models.Model):
name=models.CharField(“name”,最大长度=255,unique=True)
#这里有更多的模型字段
#带有get\u absolute\u url函数的permalink装饰器
@permalink模型
def get_绝对_url(自身):
return('example_view',(),{'example_name':self.name})
#示例视图
def示例视图(请求、名称、模板名称):
示例=获取对象或404(示例,名称=名称)
返回render_to_响应(模板名称,局部变量(),
上下文\实例=请求上下文(请求))
#示例URL配置
url(r'^(?P[-\w]+)/$,'example_view',{'template_name':'example.html'},'example_view')
现在,您可以在模板中执行以下操作:

<a href={{ example.get_absolute_url }}>{{ example.name }}</a>


希望这能有所帮助。

在您的详细信息方法中,只需将列表传递到模板中,如下所示:

def detail(request, id):
    l = listing.objects.get(pk=id)
    return render_to_response('/../templates/listing_detail.html', {'listing':l})

他不是问如何创建链接,而是问如何检索详细信息模板中的对象数据字段。@JamieForrest我将我的href更改为get_absolute_url,但当我单击它时,我没有在下一页显示object.id,然后我将详细信息视图显示为def detail(request,id):l=list.objects.all(pk=id),render_to_response(“..../templates/detail.html”,“l”:l),但我无法获取该页面上的id。在models.py中,我添加了def get_absolute_url():return“/listings/%I”%self.id,最后我的urls.py有url(r'^listings/(?P\d+),直接指向模板,{'template':'listing_detail.html'‌​}) 你能告诉我我在哪里做了什么吗?请用你的url.py更新你的问题。这是一个将url映射到你的视图函数的文件。@burhan我将我的href更改为get_absolute_url,但当我单击它时,我仍无法在下一页显示object.id,然后我将详细视图作为def detail(请求,id):l=list.objects.all(pk=id),render_to_response('../templates/detail.html','l':l),但我无法在该页面上获取id。在models.py中,我添加了def get_absolute_url():return“/listings/%I”%self.id,最后我的url.py有url(r'^listings/(?P\d+),直接_to_模板,{'template':'listing_detail.html'‌​}) 你能告诉我我在做什么吗?我对这个问题的理解是:我如何从我的模板调用我的视图,将所选的id作为参数传递?因为,他在第一次模板调用中已经传递了一个列表参数,所以我想他知道该怎么做。我将我的href更改为具有get_absolute_url,但当我单击时仍然如此在它上面,我没有在下一页上显示object.id,然后我将详细视图作为def detail(request,id):l=list.objects.all(pk=id),render_to_response(“....../templates/detail.html','l':l),但我无法在该页上获得id。在models.py中,我添加了def get_absolute_url():return”/listings/%I%self.id最后我的url.py有url(r'^listings/(?P\d+)、direct_to_template、{'template':'listing_detail.html})你能告诉我我在哪里,哪里出了什么问题吗doing@nirvana你的问题实际上是你的
url.py
——你根本没有调用查看函数!那些
url()
调用将URL模式与视图函数相关联,实际上您使用的是
direct\u to\u模板
“通用视图”而不是您编写的视图。这也解释了我上面提到的
对象列表
列表
之间的名称差异。您需要从我的应用程序名中执行
。视图导入详细信息
,然后将
直接到模板
更改为
详细信息
,与列表页面类似。
def detail(request, id):
    l = listing.objects.get(pk=id)
    return render_to_response('/../templates/listing_detail.html', {'listing':l})