2017-10-18 71 views
0

我在Django中創建了一個模板,並初始化了一個非常簡單的HTML代碼,只是爲了測試它,並從views.py文件加載了一些變量。 HTML文件被加載,但變量不是。奇怪的是,當我檢查的元素我看到這一點: enter image description hereDjango模板無法從視圖加載變量

這裏是我的代碼:

views.py:

from django.http import HttpResponse 
from django.template import loader 
from .models import Structure 

def index(request): 
    all_structures = Structure.objects.all() 
    template = loader.get_template('Structures/index.html') 
    context = { 
     'all_structures': all_structures, 
    } 
    return HttpResponse(template.render(context, request)) 

def detail(request, structure_id): 
    return HttpResponse("<h2>Details for Structure id " + str(structure_id) + "</h2>") 

的index.html:

<!DOCTYPE html> 
<html> 
    <head> 
    <meta charset="utf-8"> 
    <title></title> 
    </head> 
    <body> 
    <ul> 
     {% for structure in all_structures %} 
     <li><a href="/structures/{{ structures.id }}/">{{ structures.name }}</a></li> 
     {% endfor %} 
    </ul> 
    </body> 
</html> 

回答

0

您的變量被稱爲structure,刪除s

<li><a href="/structures/{{ structure.id }}/">{{ structure.name }}</a></li> 

關於SA password protected entry checker我發現這個thread,它似乎不是django,但防病毒或一些瀏覽器擴展。

+0

是的!非常感謝。 –

0

我想你應該寫你的函數是這樣的:

def index(request): 
    all_structures = Structure.objects.all() 
    context = { 
     'all_structures': all_structures, 
    } 
    return render(request, 'Structures/index.html', context) 

然後:

<!DOCTYPE html> 
<html> 
    <head> 
    <meta charset="utf-8"> 
    <title></title> 
    </head> 
    <body> 
    <ul> 
     {% for structure in all_structures %} 
     <li><a href="/structures/{{ structure.id }}/">{{ structure.name }}</a></li> 
     {% endfor %} 
    </ul> 
    </body> 
</html> 

你必須確實寫{structure.field}而不是{structures.field}

+0

問題確實是結構中增加的S。您的渲染功能不起作用。當我正在觀看新波士頓頻道的教程時,我保持原樣。非常感謝。 –

+1

你導入了這個:'from django.shortcuts import render' ^^ – Deadpool

+0

哈哈哈,不,我沒有。這就是爲什麼它說渲染沒有定義。對不起,這是午餐時間,我根本沒有集中注意力:o –