1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227
|
=========================
Django shortcut functions
=========================
.. module:: django.shortcuts
:synopsis:
Convience shortcuts that spam multiple levels of Django's MVC stack.
.. index:: shortcuts
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_to_response``
======================
.. function:: render_to_response(template[, dictionary][, context_instance][, mimetype])
Renders a given template with a given context dictionary and returns an
:class:`~django.http.HttpResponse` object with that rendered text.
Required arguments
------------------
``template``
The full name of a template to use or sequence of template names.
Optional arguments
------------------
``dictionary``
A dictionary of values to add to the template context. By default, this
is an empty dictionary. If a value in the dictionary is callable, the
view will call it just before rendering the template.
``context_instance``
The context instance to render the template with. By default, the template
will be rendered with a ``Context`` instance (filled with values from
``dictionary``). If you need to use :ref:`context processors
<subclassing-context-requestcontext>`, render the template with a
``RequestContext`` instance instead. Your code might look something like
this::
return render_to_response('my_template.html',
my_data_dictionary,
context_instance=RequestContext(request))
``mimetype``
.. versionadded:: 1.0
The MIME type to use for the resulting document. Defaults to the value of
the :setting:`DEFAULT_CONTENT_TYPE` setting.
Example
-------
The following example renders the template ``myapp/index.html`` with the
MIME type ``application/xhtml+xml``::
from django.shortcuts import render_to_response
def my_view(request):
# View code here...
return render_to_response('myapp/index.html', {"foo": "bar"},
mimetype="application/xhtml+xml")
This example is equivalent to::
from django.http import HttpResponse
from django.template import Context, loader
def my_view(request):
# View code here...
t = loader.get_template('myapp/template.html')
c = Context({'foo': 'bar'})
return HttpResponse(t.render(c),
mimetype="application/xhtml+xml")
``redirect``
============
.. function:: redirect(to[, permanent=False], *args, **kwargs)
.. versionadded:: 1.1
Returns an HttpResponseRedirect to the apropriate URL for the arguments
passed.
The arguments could be:
* A model: the model's `get_absolute_url()` function will be called.
* A view name, possibly with arguments: `urlresolvers.reverse()` will
be used to reverse-resolve the name.
* A 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
Examples
--------
You can use the :func:`redirect` function in a number of ways.
1. By passing some object; that object's
:meth:`~django.db.models.Model.get_absolute_url` method will be called
to figure out the redirect URL::
def my_view(request):
...
object = MyModel.objects.get(...)
return redirect(object)
2. By passing the name of a view and optionally some positional or
keyword arguments; the URL will be reverse resolved using the
:func:`~django.core.urlresolvers.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('http://example.com/')
By default, :func:`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):
...
object = MyModel.objects.get(...)
return redirect(object, permanent=True)
``get_object_or_404``
=====================
.. function:: get_object_or_404(klass, *args, **kwargs)
Calls :meth:`~django.db.models.QuerySet.get()` on a given model manager,
but it raises ``django.http.Http404`` instead of the model's
``DoesNotExist`` exception.
Required arguments
------------------
``klass``
A ``Model``, ``Manager`` or ``QuerySet`` instance from which to get the
object.
``**kwargs``
Lookup parameters, which should be in the format accepted by ``get()`` and
``filter()``.
Example
-------
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):
my_object = get_object_or_404(MyModel, pk=1)
This example is equivalent to::
from django.http import Http404
def my_view(request):
try:
my_object = MyModel.objects.get(pk=1)
except MyModel.DoesNotExist:
raise Http404
Note: As with ``get()``, an ``MultipleObjectsReturned`` exception will be
raised if more than one object is found.
``get_list_or_404``
===================
.. function:: get_list_or_404(klass, *args, **kwargs)
Returns the result of :meth:`~django.db.models.QuerySet.filter()` on a
given model manager, raising ``django.http.Http404`` if the resulting list
is empty.
Required arguments
------------------
``klass``
A ``Model``, ``Manager`` or ``QuerySet`` instance from which to get the
object.
``**kwargs``
Lookup parameters, which should be in the format accepted by ``get()`` and
``filter()``.
Example
-------
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)
This example is equivalent to::
from django.http import Http404
def my_view(request):
my_objects = list(MyModel.objects.filter(published=True))
if not my_objects:
raise Http404
|