【问题标题】:How can i display filtered objects in Django template?如何在 Django 模板中显示过滤后的对象?
【发布时间】:2013-09-17 12:26:54
【问题描述】:

假设我有一个模型,显示如下。

class Opt(models.Model):
    optID = models.CharField()
    availabiltities = models.ManyToManyField(Available)
    lastdatemodified = models.DateTimeField()
    ....
    ....

另外,opt_ID 不是主键

我希望能够在 html 模板中显示与该 opt_id 相关的所有字段。我有一个页面显示该模型的所有 Opt_id。每个 Opt_ID 都是一个链接,应该显示我之前提到的所有字段...

在views.py中我目前正在写,

def Optschedule(request, opt_id = 1):
   return render_to_response('show.html', {'OptSchedule', Opt.objects.filter(optID=Opt_id)})

在show.html中

{% for entries in OptSchedule %}
    {{entries.lastdatemodified}}
    {{entries.availabilities}}
{% endfor %}

我想,我不明白我们如何将参数传递给视图函数,以便它将这些参数用于视图中的查询集。

谢谢。

【问题讨论】:

    标签: django django-forms django-templates django-views


    【解决方案1】:

    我理解你的问题,但你缺少一些 Django 的基础知识

    您可以在请求中将参数传递给您的视图,正确配置您的 urlconf。

    但首先,让我们使用小写的函数名,正如 Python PEP8 所预先确定的那样:

    函数名称应为小写,必要时用下划线分隔单词以提高可读性。

    def opt_schedule(request, opt_id):
        opt_schedule = Opt.objects.get(id=opt_id)
        return render_to_response('show.html', {'OptSchedule': opt_schedule})
    

    您将 opt_id 传递给您的视图,而这个 opt_id 来自您的 urlconf,假设:

    (r'^show/(\d+)/$', opt_schedule),
    

    这个 urlconf 表示除了请求对象之外,您正在为视图 opt_schedule 传递一个十进制整数。当您调用 www.example.com/show/1/ 时,将调用视图 opt_schedule 并接收请求对象和小数点 1。在您的视图函数中,您正在查询具有 id(或 pk)= 1 的 Opt 对象,并将其传递给您的上下文,名称为 'OptSchedule'

    现在您可以在模板中访问对象属性,例如:

    {{ OptSchedule.lastdatemodified }}
    

    【讨论】:

    • 好吧,我以前试过这个,但它给了我一个错误,说 Opt 需要 2 个参数,而你只提供了一个..我可以解决。现在,当我使用 get(id=opt_id) 时,它给了我:“invalid literal for int() with base 10:”。我认为这是因为 Opt_id 不是整数而是 Varchar。因此,它不会获取任何内容,也无法将其转换为 int。
    猜你喜欢
    • 2019-04-05
    • 2013-08-30
    • 2019-09-10
    • 2021-11-17
    • 2017-04-15
    • 2021-04-29
    • 2013-04-27
    • 2021-10-06
    • 1970-01-01
    相关资源
    最近更新 更多