The package django.shortcuts
collects helper functions and classes that
"span" multiple levels of MVC. In other words, these functions/classes
introduce controlled coupling for convenience's sake.
render()
¶render
(request, template_name, context=None, content_type=None, status=None, using=None)¶Combines a given template with a given context dictionary and returns an
HttpResponse
object with that rendered text.
Django does not provide a shortcut function which returns a
TemplateResponse
because the constructor
of TemplateResponse
offers the same level
of convenience as render()
.
request
template_name
context
content_type
'text/html'
.status
200
.using
NAME
dari mesin cetakan untuk digunakan untuk memuat cetakan.Contoh berikut membangun cetakan myapp/index.html
dengan jenis MIME application/xhtml+xml:
from django.shortcuts import render
def my_view(request):
# View code here...
return render(
request,
"myapp/index.html",
{
"foo": "bar",
},
content_type="application/xhtml+xml",
)
Contoh ini setara pada:
from django.http import HttpResponse
from django.template import loader
def my_view(request):
# View code here...
t = loader.get_template("myapp/index.html")
c = {"foo": "bar"}
return HttpResponse(t.render(c, request), content_type="application/xhtml+xml")
redirect()
¶redirect
(to, *args, permanent=False, **kwargs)¶Mengembalikan HttpResponseRedirect
ke URL yang sesuai untuk argument dilewatkan.
Argumen dapat menjadi:
get_absolute_url()
akan dipanggil.reverse()
akan digunakan untuk membalikkan-menyelesaikan nama.Secara awalan menerbitkan pengalihan sementara; melewatkan permanent=True
ke pengalihan tetap.
Anda dapat menggunakan fungsi redirect()
dalam sejumlah cara.
Dengan melewatkan beberapa objek; metode objek get_absolute_url()
akan dipanggil untuk mencari tahu URL pengalihan:
from django.shortcuts import redirect
def my_view(request):
...
obj = MyModel.objects.get(...)
return redirect(obj)
Dengan melewatkan nama dari tampilan dan pilihan beberapa popsisi atau argumen kata kunci; URL akan dibalikkan menggunakan metode reverse()
:
def my_view(request):
...
return redirect("some-view-name", foo="bar")
Dengan melewatkan URL kode keras ke pengalihan pada:
def my_view(request):
...
return redirect("/some/url/")
Ini juga bekerja dengan URL penuh:
def my_view(request):
...
return redirect("https://example.com/")
Secara awalan, redirect()
mengembalikan peralihan sementara. Semua dari formulir diatas menerima argumen permanent
; jika disetel menjadi True
pengalihan tetap akan dikembalikan:
def my_view(request):
...
obj = MyModel.objects.get(...)
return redirect(obj, permanent=True)
get_object_or_404()
¶get_object_or_404
(klass, *args, **kwargs)¶Memanggil get()
pada pengelola model diberikan, tetapi itu memunculkan Http404
daripada eksepsi model DoesNotExist
.
Contoh berikut mendapatkan objek dengan primary key 1 dari MyModel
:
from django.shortcuts import get_object_or_404
def my_view(request):
obj = get_object_or_404(MyModel, pk=1)
Contoh ini setara pada:
from django.http import Http404
def my_view(request):
try:
obj = MyModel.objects.get(pk=1)
except MyModel.DoesNotExist:
raise Http404("No MyModel matches the given query.")
Kasus penggunaan paling umum adalah melewatkan Model
, seperti ditunjukkan diatas. Bagaimanapun, anda dapat juga melewatkan instance QuerySet
:
queryset = Book.objects.filter(title__startswith="M")
get_object_or_404(queryset, pk=1)
Contoh di atas agak dibuat-buat karena setara dengan melakukan:
get_object_or_404(Book, title__startswith="M", pk=1)
tetapi itu dapat berguna jika anda melewati variabel queryset
dari tempat lain.
Akhirnya, anda dapat juga menggunakan Manager
. Ini berguna untuk contoh jika anda mempunyai custom manager:
get_object_or_404(Book.dahl_objects, title="Matilda")
Anda dapat juga menggunakan related managers
:
author = Author.objects.get(name="Roald Dahl")
get_object_or_404(author.book_set, title="Matilda")
Catat: Seperti get()
, eksepsi MultipleObjectsReturned
akan dimunculkan jika lebih dari satu objek ditemukan.
get_list_or_404()
¶get_list_or_404
(klass, *args, **kwargs)¶Mengembalikan hasil dari filter()
pada pengelola model yang diberikan dilemparkan ke list, memunculkan Http404
jika menghasilkan list adalah kosong.
Contoh berikut mendapatkan semua objek diterbitkan dari MyModel
:
from django.shortcuts import get_list_or_404
def my_view(request):
my_objects = get_list_or_404(MyModel, published=True)
Contoh ini setara pada:
from django.http import Http404
def my_view(request):
my_objects = list(MyModel.objects.filter(published=True))
if not my_objects:
raise Http404("No MyModel matches the given query.")
Des 04, 2023