2016-07-11 5 views
0

Ich versuche Django zu lernen. Ich erstelle eine kleine Anwendung, um die grundlegenden Funktionen zu verstehen. In der Datei "views.py" einer Django-App verwenden einige Tutorials render() aus der Vorlage, während andere render() aus dem django-Shortcuts-Modul verwenden.Was ist der Unterschied zwischen render() der DjangoTemplates Klasse und render() Methode im django.shortcuts Modul?

Zum Beispiel in views.py

from django.shortcuts import render 
def home(request): 
    context = {} 
    template = "app/add_item.html" 
    return render(request, template,context) 

und noch andere,

from django.http.response import HttpResponse 
from app.models import Items # this is the model 
def home(request): 
    item_list = Items.objects.order_by('-item_name') 
    template = loader.get_template('app/add_item.html') # could be index.html as well 
    context = { 
     'item_list': item_list, 
    } 
    return HttpResponse(template.render(context, request)) 

Was ist der Unterschied zwischen machen ist() -Methode von DjangoTemplates Klasse und render() Methode in django gefunden. Shortcuts-Modul? Welchen sollte ich bevorzugen und warum?

Antwort

2

django.shortcuts.render ist, wie der Name schon sagt, eine Abkürzung für die Rückgabe einer gerenderten Vorlage als Antwort aus einer Ansicht. Seine Verwendung ist eher auf diesen Kontext beschränkt. Es dauert eine HttpRequest Instanz als erstes Argument und sein Hauptzweck, pro der Dokumentation ist zu

eine gegebenen Vorlage mit einem bestimmten Kontext-Wörterbuch kombiniert und gibt ein Httpresponse-Objekt mit diesem übertragenen Text.

Wichtig, dies wählt eine Vorlage nach Name. Es ist vorgesehen, eine Vorlage für das Rendern und die Rückgabe als Antwort auszuwählen.

Template.render ist Teil der Low-Level-Vorlagen-API und nimmt die einzelne Vorlage, die von diesem Objekt repräsentiert wird, und rendert sie in eine Zeichenfolge.

Wichtig, dies nimmt nur die Vorlage, die bereits von Ihrem Objekt dargestellt wird. Es gibt keinen Mechanismus zum Ermitteln einer anderen Vorlage zum Rendern.


Im Allgemeinen ist die Abkürzung Version der nützlichsten, wie oft Sie eine gerenderte Vorlage als eine Antwort von Ihren Ansichten zurückkehren möchten. Dies ist der ganze Grund, warum es existiert.

+0

Danke. Aber "Es gibt keinen Mechanismus zum Ermitteln einer anderen Vorlage zum Rendern". Sogar für '' 'django.shortcuts.render''' geben Sie explizit die HTML-Vorlage an. Ist es nicht wahr? – hAcKnRoCk

+0

Sorry für Verwirrung. Ich meine, dass mit der Renderfunktion ('django.shortcuts.render') ein Argument erwartet wird, das ihm sagt, welche Vorlage gerendert werden soll. 'Template.render' wird immer nur diese eine Vorlage darstellen. Es gibt kein Argument, das Sie weitergeben können, um etwas anderes zu rendern. Macht mehr Sinn? –