1

我想用Django在我的网站上做一个布告栏,所以我做了一个这样的模型:

class notice(models.Model):
    # the title of the notice
    text = models.CharField(max_length = 50)
    date_added = models.DateTimeField(auto_now_add = True)

    def __str__(self):
        return self.text

我这样写了“views.py”(主要部分):

def notices(request):
    # display the notice title
    notices = notice.objects.order_by("date_added")
    context = {"notice": notices}
    return render(request, "index.html", context)

但是在“index.html”文件中,当我编写这些代码时:

    <ul>
        {% for n in notices %}
        <li>{{n.text}}</li>
        {% endfor %}
    </ul>

什么都没有显示。有谁知道如何解决这个问题?如果你能帮助我,我将不胜感激。

嗯……我的英语真的很差,如果我说的有点不礼貌……你能原谅我吗?谢谢!

更新:

感谢 Biplove Lamichhane 的回答!这就是它在运行 Django Shell 时所说的:

Python 3.7.4 (tags/v3.7.4:e09359112e, Jul  8 2019, 20:34:20) [MSC v.1916 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
(InteractiveConsole)
>>> from wl.models import *
>>> notice.objects.order_by("date_added")
<QuerySet [<notice: testing>]>

在“index.html”中:

    <ul>
        {% for n in notices %}
        <li>{{n}}</li>
        {% endfor %}
    </ul>

在“views.py”中:

def notices(request):
    # display the notice title
    notices = notice.objects.order_by("date_added")
    context = {"notices": notices}
    return render(request, "index.html", context)

不过,什么也没显示。

4

2 回答 2

1

是的,确实是一个错字。让它在 html 页面中通知,你就完成了。

于 2020-08-09T09:15:53.770 回答
1

你给notice了上下文变量,在这里:context = {"notice": notices}。但notices在模板中使用。因此,要么更改 views.py 中的变量,例如:

context = {"notices": notices}

或者,

更改模板,如:

    <ul>
        {% for n in notice %}
        <li>{{ n.text }}</li>
        {% endfor %}
    </ul>

更新

当您的通知类__str__返回时text,您可以简单地执行以下操作:

<li>{{ n }}</li>
于 2020-08-09T09:10:57.707 回答