5.8 Rendering Items in the Template
This commit is contained in:
parent
e4cb70719e
commit
fd4dcc2425
@ -338,3 +338,55 @@ So, separate the test code into two:
|
|||||||
self.assertEqual(response.status_code, 302)
|
self.assertEqual(response.status_code, 302)
|
||||||
self.assertEqual(response['location'], '/')
|
self.assertEqual(response['location'], '/')
|
||||||
```
|
```
|
||||||
|
|
||||||
|
## 5.8 Rendering Items in the Template
|
||||||
|
|
||||||
|
Now, both "Don't save blank items for every request" and "Code smell: POST test is too long?" are finished
|
||||||
|
|
||||||
|
Target: "Display multiple item in the table"
|
||||||
|
|
||||||
|
TDD step 1: create a UT to check
|
||||||
|
|
||||||
|
```python
|
||||||
|
|
||||||
|
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())
|
||||||
|
```
|
||||||
|
|
||||||
|
Test will fail as `home.html` we still only allow one item in table
|
||||||
|
|
||||||
|
```html
|
||||||
|
<table id="id_list_table">
|
||||||
|
<tr><td>1: {{ new_item_text }}</td></tr>
|
||||||
|
</table>
|
||||||
|
```
|
||||||
|
|
||||||
|
Fix it by allow it to have iterating list. Django template syntax has a tag for iterating through a list `{% for .. in .. %}` + `% endfor %`
|
||||||
|
|
||||||
|
```html
|
||||||
|
<table id="id_list_table">
|
||||||
|
{% for item in items %}
|
||||||
|
<tr><td>1: {{ item.text }}</td></tr>
|
||||||
|
{% endfor %}
|
||||||
|
</table>
|
||||||
|
```
|
||||||
|
|
||||||
|
Also need pass items to template from home page view:
|
||||||
|
|
||||||
|
```python
|
||||||
|
def home_page(request):
|
||||||
|
if request.method == 'POST':
|
||||||
|
Item.objects.create(text=request.POST['item_text'])
|
||||||
|
return redirect('/')
|
||||||
|
|
||||||
|
items = Item.objects.all() # get objects from database (model)
|
||||||
|
return render(request=request,
|
||||||
|
template_name='home.html',
|
||||||
|
context={'items': items}) # pass items into template using render
|
||||||
|
```
|
Loading…
x
Reference in New Issue
Block a user