包 django.shortcuts 收集助手函數(shù)和“跨”多級mvc的類,換句話說,為了方便起見,這些函數(shù)/類引入受控耦合。
render()
render(request, template_name, context=None, content_type=None, status=None, using=None)
將給定的模板與給定的上下文字典組合在一起,并以渲染的文本返回一個 HttpResponse 對象。
Django沒有提供返回:class:~django.template.response.TemplateResponse 的快捷函數(shù),因為:class:~django.template.response.TemplateResponse 的構(gòu)造函數(shù)提供了與:func:`render()`相同的方便程度。
必選參數(shù)
request
用于生成此響應(yīng)的請求對象。
template_name
要使用的模板的全名或模板名稱的序列。如果給定一個序列,則將使用存在的第一個模板。有關(guān)如何查找模板的更多信息,請參見 template loading documentation 。
可選參數(shù)
context
要添加到模板上下文的值的字典。 默認(rèn)情況下,這是一個空的字典。 如果字典中的值是可調(diào)用的,則視圖將在渲染模板之前調(diào)用它。
content_type
用于結(jié)果文檔的MIME類型默認(rèn)為:設(shè)置:setting:DEFAULT_CONTENT_TYPE 設(shè)置的值。
status
響應(yīng)的狀態(tài)代碼默認(rèn)為“200”。
using
用于加載模板的模板引擎的 :setting:`NAME ` 。
例如
下面的示例使用MIME類型呈現(xiàn)模板``myapp/index.html`` 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')
此示例相當(dāng)于:
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')
render_to_response()
render_to_response(template_name, context=None, content_type=None, status=None, using=None)[源代碼]?
2.0 版后已移除.
該函數(shù)之前引入了:func:render ,并類似地工作,只是它不使響應(yīng)中的 request 可用。
redirect()
redirect(to, permanent=False, *args, **kwargs)[源代碼]?
將一個 HttpResponseRedirect 返回到傳遞的參數(shù)的適當(dāng)URL。
論點可以是:
A model: the model's get_absolute_url() function will be called.
A view name, possibly with arguments: reverse() will be used to reverse-resolve the name.
An absolute or relative URL, which will be used as-is for the redirect location.
By default issues a temporary redirect; pass permanent=True to issue a permanent redirect.
示例
You can use the redirect() function in a number of ways.
1.By passing some object; that object's get_absolute_url() method will be called to figure out the redirect URL:
from django.shortcuts import redirect
def my_view(request):
? ? ...
? ? obj = MyModel.objects.get(...)
? ? return redirect(obj)
2.By passing the name of a view and optionally some positional or keyword arguments; the URL will be reverse resolved using the reverse() method:
def my_view(request):
? ? ...
? ? return redirect('some-view-name', foo='bar')
3.By passing a hardcoded URL to redirect to:
def my_view(request):
? ? ...
? ? return redirect('/some/url/')
This also works with full URLs:
def my_view(request):
? ? ...
? ? return redirect('https://example.com/')
By default, redirect() returns a temporary redirect. All of the above forms accept a permanent argument; if set to True a permanent redirect will be returned:
def my_view(request):
? ? ...
? ? obj = MyModel.objects.get(...)
? ? return redirect(obj, permanent=True)
get_object_or_404()
get_object_or_404(klass, *args, **kwargs)[源代碼]?
Calls get() on a given model manager, but it raises Http404 instead of the model's DoesNotExist exception.
必選參數(shù)
klass
A Model class, a Manager, or a QuerySet instance from which to get the object.
**kwargs
Lookup parameters, which should be in the format accepted by get() and filter().
例如
The following example gets the object with the primary key of 1 from MyModel:
from django.shortcuts import get_object_or_404
def my_view(request):
? ? obj = get_object_or_404(MyModel, pk=1)
此示例相當(dāng)于:
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.")
The most common use case is to pass a Model, as shown above. However, you can also pass a QuerySet instance:
queryset = Book.objects.filter(title__startswith='M')
get_object_or_404(queryset, pk=1)
The above example is a bit contrived since it's equivalent to doing:
get_object_or_404(Book, title__startswith='M', pk=1)
but it can be useful if you are passed the queryset variable from somewhere else.
Finally, you can also use a Manager. This is useful for example if you have a custom manager:
get_object_or_404(Book.dahl_objects, title='Matilda')
You can also use related managers:
author = Author.objects.get(name='Roald Dahl')
get_object_or_404(author.book_set, title='Matilda')
Note: As with get(), a MultipleObjectsReturned exception will be raised if more than one object is found.
get_list_or_404()
get_list_or_404(klass, *args, **kwargs)[源代碼]?
Returns the result of filter() on a given model manager cast to a list, raising Http404 if the resulting list is empty.
必選參數(shù)
klass
A Model, Manager or QuerySet instance from which to get the list.
**kwargs
Lookup parameters, which should be in the format accepted by get() and filter().
例如
The following example gets all published objects from MyModel:
from django.shortcuts import get_list_or_404
def my_view(request):
? ? my_objects = get_list_or_404(MyModel, published=True)
此示例相當(dāng)于:
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.")