Fungsi jalan pintas Django¶
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 ofTemplateResponse
offers the same level of convenience asrender()
.
Argumen dibutuhkan¶
request
- Objek peminta digunakan untuk membangkitkan tanggapa ini.
template_name
- The full name of a template to use or sequence of template names. If a sequence is given, the first template that exists will be used. See the template loading documentation for more information on how templates are found.
Argumen pilihan¶
context
- Nilai kamus untuk ditambah ke konteks cetakan. Secara awalan, ini adalah kamus kosong. Jika nilai di kamus adalah callable, tampilan akan memanggilnya sesaat sebelum membangun cetakan.
content_type
- Jenis MIME digunakan untuk menghasilkan dokumen. Awalan menjadi
'text/html'
. status
- Kode status untuk tanggapan. Awalan menjadi
200
. using
NAME
dari mesin cetakan untuk digunakan untuk memuat cetakan.
Contoh¶
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:
- Sebuah model: fungsi model's
get_absolute_url()
akan dipanggil. - Nama tampilan, kemungkinan dengan argumen:
reverse()
akan digunakan untuk membalikkan-menyelesaikan nama. - Sebuah URL mutlak atau relatif, yang akan digunakan dengan adanya untuk pengalihan lokasi.
Secara awalan menerbitkan pengalihan sementara; melewatkan
permanent=True
ke pengalihan tetap.- Sebuah model: fungsi model's
Contoh¶
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 memunculkanHttp404
daripada eksepsi modelDoesNotExist
.
Argumen¶
Contoh¶
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, memunculkanHttp404
jika menghasilkan list adalah kosong.
Argumen¶
Contoh¶
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.")