Django快捷函數(shù)

包 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.")

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容