zoukankan      html  css  js  c++  java
  • Django学习系列17:在模板中渲染待办事项

    前面提到的问题中在表格中显示多个待办事项 是最后一个容易解决的问题。要编写一个新单元测试,检查模板是否也能显示多个待办事项:

    lists/tests.py

        def test_displays_all_list_items(self):
            Item.objects.create(text='itemey 1')
            Item.objects.create(text='itemey 2')
    
            response = self.client.get('/')
    
            self.assertIn('itemey 1', response.content.decode())
            self.assertIn('itemey 2', response.content.decode())

    运行测试和预期一样会失败

    AssertionError: 'itemey 1' not found in '<html>
     <head>
     [...]
    The Django template syntax has a tag for iterating through lists, {% for .. in ..
    %}; 

    Django的模板句法中有一个用于遍历列表的标签,即{% for .. in .. %};可以使用下面的方式使用这个标签:

            <table id="id_list_table">
                {% for item in items %}
                    <tr><td>1: {{ item.text }}</td></tr>
                {% endfor %}
            </table>

     这是模板的主要优势之一,现在模板会在渲染多个<tr>行,每一行对应items变量中的一个元素。模板的魔力,可以阅读Django文档

    只修改模板还不能让测试通过,还需要在首页的视图中把待办事项传入模板

    def home_page(request):
        if request.method == 'POST':
            Item.objects.create(text=request.POST['item_text'])
            return redirect('/')
    
        items = Item.objects.all()
        return render(request,'home.html', {'items': items})

    这样单元测试就能通过了。执行一下功能测试,能通过吗?

    AssertionError: 'To-Do' not found in 'OperationalError at /'

    很显然不能,要使用另一种功能测试调试技术,也是最直观的一种:手动访问网站。 http://localhost: 8000,会看见一个Django调试页面,提示“no such table: lists_item(没有这个表lists_item)”,一个很有帮助的调试信息,如图:

  • 相关阅读:
    编程原理
    VMware
    window的composer安装
    微信小程序支付的坑
    php 生成二维码
    接口文档在线编辑
    mysql函数的使用
    linux的反斜扛的问题
    require_once中使用./和../时遇到的坑
    微信测试账号申请后,登陆空白的现象
  • 原文地址:https://www.cnblogs.com/ranxf/p/11691680.html
Copyright © 2011-2022 走看看