Fixed #25969 -- Replaced render_to_response() with render() in docs examples.
This commit is contained in:
parent
edf3b88f1a
commit
4d83b0163e
|
@ -7,7 +7,7 @@
|
||||||
Example:
|
Example:
|
||||||
|
|
||||||
* In the view:
|
* In the view:
|
||||||
return render_to_response('template.html', {'google' : GoogleMap(key="abcdefg")})
|
return render(request, 'template.html', {'google': GoogleMap(key="abcdefg")})
|
||||||
|
|
||||||
* In the template:
|
* In the template:
|
||||||
|
|
||||||
|
|
|
@ -24,7 +24,7 @@ class GEvent(object):
|
||||||
|
|
||||||
Example:
|
Example:
|
||||||
|
|
||||||
from django.shortcuts import render_to_response
|
from django.shortcuts import render
|
||||||
from django.contrib.gis.maps.google import GoogleMap, GEvent, GPolyline
|
from django.contrib.gis.maps.google import GoogleMap, GEvent, GPolyline
|
||||||
|
|
||||||
def sample_request(request):
|
def sample_request(request):
|
||||||
|
@ -32,8 +32,9 @@ class GEvent(object):
|
||||||
event = GEvent('click',
|
event = GEvent('click',
|
||||||
'function() { location.href = "http://www.google.com"}')
|
'function() { location.href = "http://www.google.com"}')
|
||||||
polyline.add_event(event)
|
polyline.add_event(event)
|
||||||
return render_to_response('mytemplate.html',
|
return render(request, 'mytemplate.html', {
|
||||||
{'google' : GoogleMap(polylines=[polyline])})
|
'google': GoogleMap(polylines=[polyline]),
|
||||||
|
})
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def __init__(self, event, action):
|
def __init__(self, event, action):
|
||||||
|
@ -271,7 +272,7 @@ class GMarker(GOverlayBase):
|
||||||
|
|
||||||
Example:
|
Example:
|
||||||
|
|
||||||
from django.shortcuts import render_to_response
|
from django.shortcuts import render
|
||||||
from django.contrib.gis.maps.google.overlays import GMarker, GEvent
|
from django.contrib.gis.maps.google.overlays import GMarker, GEvent
|
||||||
|
|
||||||
def sample_request(request):
|
def sample_request(request):
|
||||||
|
@ -279,8 +280,9 @@ class GMarker(GOverlayBase):
|
||||||
event = GEvent('click',
|
event = GEvent('click',
|
||||||
'function() { location.href = "http://www.google.com"}')
|
'function() { location.href = "http://www.google.com"}')
|
||||||
marker.add_event(event)
|
marker.add_event(event)
|
||||||
return render_to_response('mytemplate.html',
|
return render(request, 'mytemplate.html', {
|
||||||
{'google' : GoogleMap(markers=[marker])})
|
'google': GoogleMap(markers=[marker]),
|
||||||
|
})
|
||||||
"""
|
"""
|
||||||
def __init__(self, geom, title=None, draggable=False, icon=None):
|
def __init__(self, geom, title=None, draggable=False, icon=None):
|
||||||
"""
|
"""
|
||||||
|
|
|
@ -553,8 +553,8 @@ details on these changes.
|
||||||
:class:`~django.template.response.SimpleTemplateResponse`, and
|
:class:`~django.template.response.SimpleTemplateResponse`, and
|
||||||
:class:`~django.template.response.TemplateResponse`, will be removed.
|
:class:`~django.template.response.TemplateResponse`, will be removed.
|
||||||
``content_type`` should be used instead. This also applies to the
|
``content_type`` should be used instead. This also applies to the
|
||||||
:func:`~django.shortcuts.render_to_response` shortcut and
|
``render_to_response()`` shortcut and the sitemap views,
|
||||||
the sitemap views, :func:`~django.contrib.sitemaps.views.index` and
|
:func:`~django.contrib.sitemaps.views.index` and
|
||||||
:func:`~django.contrib.sitemaps.views.sitemap`.
|
:func:`~django.contrib.sitemaps.views.sitemap`.
|
||||||
|
|
||||||
* When :class:`~django.http.HttpResponse` is instantiated with an iterator,
|
* When :class:`~django.http.HttpResponse` is instantiated with an iterator,
|
||||||
|
|
|
@ -45,31 +45,11 @@ To take advantage of CSRF protection in your views, follow these steps:
|
||||||
This should not be done for POST forms that target external URLs, since
|
This should not be done for POST forms that target external URLs, since
|
||||||
that would cause the CSRF token to be leaked, leading to a vulnerability.
|
that would cause the CSRF token to be leaked, leading to a vulnerability.
|
||||||
|
|
||||||
3. In the corresponding view functions, ensure that the
|
3. In the corresponding view functions, ensure that
|
||||||
``'django.template.context_processors.csrf'`` context processor is
|
:class:`~django.template.RequestContext` is used to render the response so
|
||||||
being used. Usually, this can be done in one of two ways:
|
that ``{% csrf_token %}`` will work properly. If you're using the
|
||||||
|
:func:`~django.shortcuts.render` function, generic views, or contrib apps,
|
||||||
1. Use RequestContext, which always uses
|
you are covered already since these all use ``RequestContext``.
|
||||||
``'django.template.context_processors.csrf'`` (no matter what template
|
|
||||||
context processors are configured in the :setting:`TEMPLATES` setting).
|
|
||||||
If you are using generic views or contrib apps, you are covered already,
|
|
||||||
since these apps use RequestContext throughout.
|
|
||||||
|
|
||||||
2. Manually import and use the processor to generate the CSRF token and
|
|
||||||
add it to the template context. e.g.::
|
|
||||||
|
|
||||||
from django.shortcuts import render_to_response
|
|
||||||
from django.template.context_processors import csrf
|
|
||||||
|
|
||||||
def my_view(request):
|
|
||||||
c = {}
|
|
||||||
c.update(csrf(request))
|
|
||||||
# ... view code here
|
|
||||||
return render_to_response("a_template.html", c)
|
|
||||||
|
|
||||||
You may want to write your own
|
|
||||||
:func:`~django.shortcuts.render_to_response()` wrapper that takes care
|
|
||||||
of this step for you.
|
|
||||||
|
|
||||||
.. _csrf-ajax:
|
.. _csrf-ajax:
|
||||||
|
|
||||||
|
|
|
@ -283,8 +283,7 @@ Using TemplateResponse and SimpleTemplateResponse
|
||||||
|
|
||||||
A :class:`TemplateResponse` object can be used anywhere that a normal
|
A :class:`TemplateResponse` object can be used anywhere that a normal
|
||||||
:class:`django.http.HttpResponse` can be used. It can also be used as an
|
:class:`django.http.HttpResponse` can be used. It can also be used as an
|
||||||
alternative to calling :func:`~django.shortcuts.render()` or
|
alternative to calling :func:`~django.shortcuts.render()`.
|
||||||
:func:`~django.shortcuts.render_to_response()`.
|
|
||||||
|
|
||||||
For example, the following simple view returns a :class:`TemplateResponse`
|
For example, the following simple view returns a :class:`TemplateResponse`
|
||||||
with a simple template and a context containing a queryset::
|
with a simple template and a context containing a queryset::
|
||||||
|
|
|
@ -321,7 +321,7 @@ requests. These include:
|
||||||
template tags that require access to template context.
|
template tags that require access to template context.
|
||||||
|
|
||||||
* A new :meth:`~django.shortcuts.render()` shortcut -- an alternative
|
* A new :meth:`~django.shortcuts.render()` shortcut -- an alternative
|
||||||
to :meth:`~django.shortcuts.render_to_response()` providing a
|
to ``django.shortcuts.render_to_response()`` providing a
|
||||||
:class:`~django.template.RequestContext` by default.
|
:class:`~django.template.RequestContext` by default.
|
||||||
|
|
||||||
* Support for combining :class:`F expressions <django.db.models.F>`
|
* Support for combining :class:`F expressions <django.db.models.F>`
|
||||||
|
|
|
@ -853,7 +853,7 @@ Templates
|
||||||
* :func:`django.template.loader.get_template()`
|
* :func:`django.template.loader.get_template()`
|
||||||
* :func:`django.template.loader.select_template()`
|
* :func:`django.template.loader.select_template()`
|
||||||
* :func:`django.shortcuts.render()`
|
* :func:`django.shortcuts.render()`
|
||||||
* :func:`django.shortcuts.render_to_response()`
|
* ``django.shortcuts.render_to_response()``
|
||||||
|
|
||||||
* The :tfilter:`time` filter now accepts timezone-related :ref:`format
|
* The :tfilter:`time` filter now accepts timezone-related :ref:`format
|
||||||
specifiers <date-and-time-formatting-specifiers>` ``'e'``, ``'O'`` , ``'T'``
|
specifiers <date-and-time-formatting-specifiers>` ``'e'``, ``'O'`` , ``'T'``
|
||||||
|
@ -1824,8 +1824,7 @@ removed in Django 1.7 (please see the
|
||||||
* :class:`~django.http.HttpResponse`,
|
* :class:`~django.http.HttpResponse`,
|
||||||
:class:`~django.template.response.SimpleTemplateResponse`,
|
:class:`~django.template.response.SimpleTemplateResponse`,
|
||||||
:class:`~django.template.response.TemplateResponse`,
|
:class:`~django.template.response.TemplateResponse`,
|
||||||
:func:`~django.shortcuts.render_to_response`,
|
``render_to_response()``, :func:`~django.contrib.sitemaps.views.index`, and
|
||||||
:func:`~django.contrib.sitemaps.views.index`, and
|
|
||||||
:func:`~django.contrib.sitemaps.views.sitemap` no longer take a ``mimetype``
|
:func:`~django.contrib.sitemaps.views.sitemap` no longer take a ``mimetype``
|
||||||
argument
|
argument
|
||||||
|
|
||||||
|
|
|
@ -1578,7 +1578,7 @@ The following functions will no longer accept a ``dirs`` parameter to override
|
||||||
* :func:`django.template.loader.get_template()`
|
* :func:`django.template.loader.get_template()`
|
||||||
* :func:`django.template.loader.select_template()`
|
* :func:`django.template.loader.select_template()`
|
||||||
* :func:`django.shortcuts.render()`
|
* :func:`django.shortcuts.render()`
|
||||||
* :func:`django.shortcuts.render_to_response()`
|
* ``django.shortcuts.render_to_response()``
|
||||||
|
|
||||||
The parameter didn't work consistently across different template loaders and
|
The parameter didn't work consistently across different template loaders and
|
||||||
didn't work for included templates.
|
didn't work for included templates.
|
||||||
|
|
|
@ -1114,11 +1114,12 @@ The headers you pass to ``vary_on_headers`` are not case sensitive;
|
||||||
You can also use a helper function, :func:`django.utils.cache.patch_vary_headers`,
|
You can also use a helper function, :func:`django.utils.cache.patch_vary_headers`,
|
||||||
directly. This function sets, or adds to, the ``Vary header``. For example::
|
directly. This function sets, or adds to, the ``Vary header``. For example::
|
||||||
|
|
||||||
|
from django.shortcuts import render
|
||||||
from django.utils.cache import patch_vary_headers
|
from django.utils.cache import patch_vary_headers
|
||||||
|
|
||||||
def my_view(request):
|
def my_view(request):
|
||||||
# ...
|
# ...
|
||||||
response = render_to_response('template_name', context)
|
response = render(request, 'template_name', context)
|
||||||
patch_vary_headers(response, ['Cookie'])
|
patch_vary_headers(response, ['Cookie'])
|
||||||
return response
|
return response
|
||||||
|
|
||||||
|
|
|
@ -582,7 +582,7 @@ The only thing you will want to be aware of is making sure to use the
|
||||||
management form inside the template. Let's look at a sample view::
|
management form inside the template. Let's look at a sample view::
|
||||||
|
|
||||||
from django.forms import formset_factory
|
from django.forms import formset_factory
|
||||||
from django.shortcuts import render_to_response
|
from django.shortcuts import render
|
||||||
from myapp.forms import ArticleForm
|
from myapp.forms import ArticleForm
|
||||||
|
|
||||||
def manage_articles(request):
|
def manage_articles(request):
|
||||||
|
@ -594,7 +594,7 @@ management form inside the template. Let's look at a sample view::
|
||||||
pass
|
pass
|
||||||
else:
|
else:
|
||||||
formset = ArticleFormSet()
|
formset = ArticleFormSet()
|
||||||
return render_to_response('manage_articles.html', {'formset': formset})
|
return render(request, 'manage_articles.html', {'formset': formset})
|
||||||
|
|
||||||
The ``manage_articles.html`` template might look like this:
|
The ``manage_articles.html`` template might look like this:
|
||||||
|
|
||||||
|
@ -659,7 +659,7 @@ more than one formset to be sent to a view without name clashing. Lets take
|
||||||
a look at how this might be accomplished::
|
a look at how this might be accomplished::
|
||||||
|
|
||||||
from django.forms import formset_factory
|
from django.forms import formset_factory
|
||||||
from django.shortcuts import render_to_response
|
from django.shortcuts import render
|
||||||
from myapp.forms import ArticleForm, BookForm
|
from myapp.forms import ArticleForm, BookForm
|
||||||
|
|
||||||
def manage_articles(request):
|
def manage_articles(request):
|
||||||
|
@ -674,7 +674,7 @@ a look at how this might be accomplished::
|
||||||
else:
|
else:
|
||||||
article_formset = ArticleFormSet(prefix='articles')
|
article_formset = ArticleFormSet(prefix='articles')
|
||||||
book_formset = BookFormSet(prefix='books')
|
book_formset = BookFormSet(prefix='books')
|
||||||
return render_to_response('manage_articles.html', {
|
return render(request, 'manage_articles.html', {
|
||||||
'article_formset': article_formset,
|
'article_formset': article_formset,
|
||||||
'book_formset': book_formset,
|
'book_formset': book_formset,
|
||||||
})
|
})
|
||||||
|
|
|
@ -942,7 +942,7 @@ Model formsets are very similar to formsets. Let's say we want to present a
|
||||||
formset to edit ``Author`` model instances::
|
formset to edit ``Author`` model instances::
|
||||||
|
|
||||||
from django.forms import modelformset_factory
|
from django.forms import modelformset_factory
|
||||||
from django.shortcuts import render_to_response
|
from django.shortcuts import render
|
||||||
from myapp.models import Author
|
from myapp.models import Author
|
||||||
|
|
||||||
def manage_authors(request):
|
def manage_authors(request):
|
||||||
|
@ -954,9 +954,7 @@ formset to edit ``Author`` model instances::
|
||||||
# do something.
|
# do something.
|
||||||
else:
|
else:
|
||||||
formset = AuthorFormSet()
|
formset = AuthorFormSet()
|
||||||
return render_to_response("manage_authors.html", {
|
return render(request, 'manage_authors.html', {'formset': formset})
|
||||||
"formset": formset,
|
|
||||||
})
|
|
||||||
|
|
||||||
As you can see, the view logic of a model formset isn't drastically different
|
As you can see, the view logic of a model formset isn't drastically different
|
||||||
than that of a "normal" formset. The only difference is that we call
|
than that of a "normal" formset. The only difference is that we call
|
||||||
|
@ -1010,7 +1008,7 @@ As stated earlier, you can override the default queryset used by the model
|
||||||
formset::
|
formset::
|
||||||
|
|
||||||
from django.forms import modelformset_factory
|
from django.forms import modelformset_factory
|
||||||
from django.shortcuts import render_to_response
|
from django.shortcuts import render
|
||||||
from myapp.models import Author
|
from myapp.models import Author
|
||||||
|
|
||||||
def manage_authors(request):
|
def manage_authors(request):
|
||||||
|
@ -1023,9 +1021,7 @@ formset::
|
||||||
# Do something.
|
# Do something.
|
||||||
else:
|
else:
|
||||||
formset = AuthorFormSet(queryset=Author.objects.filter(name__startswith='O'))
|
formset = AuthorFormSet(queryset=Author.objects.filter(name__startswith='O'))
|
||||||
return render_to_response("manage_authors.html", {
|
return render(request, 'manage_authors.html", {'formset': formset})
|
||||||
"formset": formset,
|
|
||||||
})
|
|
||||||
|
|
||||||
Note that we pass the ``queryset`` argument in both the ``POST`` and ``GET``
|
Note that we pass the ``queryset`` argument in both the ``POST`` and ``GET``
|
||||||
cases in this example.
|
cases in this example.
|
||||||
|
@ -1201,9 +1197,7 @@ of a model. Here's how you can do that::
|
||||||
return HttpResponseRedirect(author.get_absolute_url())
|
return HttpResponseRedirect(author.get_absolute_url())
|
||||||
else:
|
else:
|
||||||
formset = BookInlineFormSet(instance=author)
|
formset = BookInlineFormSet(instance=author)
|
||||||
return render_to_response("manage_books.html", {
|
return render(request, 'manage_books.html', {'formset': formset})
|
||||||
"formset": formset,
|
|
||||||
})
|
|
||||||
|
|
||||||
Notice how we pass ``instance`` in both the ``POST`` and ``GET`` cases.
|
Notice how we pass ``instance`` in both the ``POST`` and ``GET`` cases.
|
||||||
|
|
||||||
|
|
|
@ -45,7 +45,7 @@ form as described in :ref:`binding-uploaded-files`. This would look
|
||||||
something like::
|
something like::
|
||||||
|
|
||||||
from django.http import HttpResponseRedirect
|
from django.http import HttpResponseRedirect
|
||||||
from django.shortcuts import render_to_response
|
from django.shortcuts import render
|
||||||
from .forms import UploadFileForm
|
from .forms import UploadFileForm
|
||||||
|
|
||||||
# Imaginary function to handle an uploaded file.
|
# Imaginary function to handle an uploaded file.
|
||||||
|
@ -59,7 +59,7 @@ something like::
|
||||||
return HttpResponseRedirect('/success/url/')
|
return HttpResponseRedirect('/success/url/')
|
||||||
else:
|
else:
|
||||||
form = UploadFileForm()
|
form = UploadFileForm()
|
||||||
return render_to_response('upload.html', {'form': form})
|
return render(request, 'upload.html', {'form': form})
|
||||||
|
|
||||||
Notice that we have to pass :attr:`request.FILES <django.http.HttpRequest.FILES>`
|
Notice that we have to pass :attr:`request.FILES <django.http.HttpRequest.FILES>`
|
||||||
into the form's constructor; this is how file data gets bound into a form.
|
into the form's constructor; this is how file data gets bound into a form.
|
||||||
|
|
|
@ -451,6 +451,9 @@ yourself. Do this after you've verified that the test cookie worked.
|
||||||
|
|
||||||
Here's a typical usage example::
|
Here's a typical usage example::
|
||||||
|
|
||||||
|
from django.http import HttpResponse
|
||||||
|
from django.shortcuts import render
|
||||||
|
|
||||||
def login(request):
|
def login(request):
|
||||||
if request.method == 'POST':
|
if request.method == 'POST':
|
||||||
if request.session.test_cookie_worked():
|
if request.session.test_cookie_worked():
|
||||||
|
@ -459,7 +462,7 @@ Here's a typical usage example::
|
||||||
else:
|
else:
|
||||||
return HttpResponse("Please enable cookies and try again.")
|
return HttpResponse("Please enable cookies and try again.")
|
||||||
request.session.set_test_cookie()
|
request.session.set_test_cookie()
|
||||||
return render_to_response('foo/login_form.html')
|
return render(request, 'foo/login_form.html')
|
||||||
|
|
||||||
Using sessions out of views
|
Using sessions out of views
|
||||||
===========================
|
===========================
|
||||||
|
|
|
@ -20,9 +20,6 @@ introduce controlled coupling for convenience's sake.
|
||||||
Combines a given template with a given context dictionary and returns an
|
Combines a given template with a given context dictionary and returns an
|
||||||
:class:`~django.http.HttpResponse` object with that rendered text.
|
:class:`~django.http.HttpResponse` object with that rendered text.
|
||||||
|
|
||||||
:func:`render()` is the same as a call to :func:`render_to_response()` but
|
|
||||||
it also makes the current request available in the template.
|
|
||||||
|
|
||||||
Django does not provide a shortcut function which returns a
|
Django does not provide a shortcut function which returns a
|
||||||
:class:`~django.template.response.TemplateResponse` because the constructor
|
:class:`~django.template.response.TemplateResponse` because the constructor
|
||||||
of :class:`~django.template.response.TemplateResponse` offers the same level
|
of :class:`~django.template.response.TemplateResponse` offers the same level
|
||||||
|
@ -35,7 +32,10 @@ Required arguments
|
||||||
The request object used to generate this response.
|
The request object used to generate this response.
|
||||||
|
|
||||||
``template_name``
|
``template_name``
|
||||||
The full name of a template to use or sequence of template names.
|
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
|
||||||
|
:ref:`template loading documentation <template-loading>` for more
|
||||||
|
information on how templates are found.
|
||||||
|
|
||||||
Optional arguments
|
Optional arguments
|
||||||
------------------
|
------------------
|
||||||
|
@ -86,61 +86,9 @@ This example is equivalent to::
|
||||||
|
|
||||||
.. function:: render_to_response(template_name, context=None, content_type=None, status=None, using=None)
|
.. function:: render_to_response(template_name, context=None, content_type=None, status=None, using=None)
|
||||||
|
|
||||||
Renders a given template with a given context dictionary and returns an
|
This function preceded the introduction of :func:`render` and works
|
||||||
:class:`~django.http.HttpResponse` object with that rendered text.
|
similarly except that it doesn't making the ``request`` available in the
|
||||||
|
response. It's not recommended and is likely to be deprecated in the future.
|
||||||
Required arguments
|
|
||||||
------------------
|
|
||||||
|
|
||||||
``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
|
|
||||||
:ref:`template loading documentation <template-loading>` for more
|
|
||||||
information on how templates are found.
|
|
||||||
|
|
||||||
Optional arguments
|
|
||||||
------------------
|
|
||||||
|
|
||||||
``context``
|
|
||||||
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.
|
|
||||||
|
|
||||||
``content_type``
|
|
||||||
The MIME type to use for the resulting document. Defaults to the value of
|
|
||||||
the :setting:`DEFAULT_CONTENT_TYPE` setting.
|
|
||||||
|
|
||||||
``status``
|
|
||||||
The status code for the response. Defaults to ``200``.
|
|
||||||
|
|
||||||
``using``
|
|
||||||
The :setting:`NAME <TEMPLATES-NAME>` of a template engine to use for
|
|
||||||
loading the template.
|
|
||||||
|
|
||||||
Example
|
|
||||||
-------
|
|
||||||
|
|
||||||
The following example renders the template ``myapp/index.html`` with the
|
|
||||||
MIME type :mimetype:`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"},
|
|
||||||
content_type="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/index.html')
|
|
||||||
c = Context({'foo': 'bar'})
|
|
||||||
return HttpResponse(t.render(c),
|
|
||||||
content_type="application/xhtml+xml")
|
|
||||||
|
|
||||||
``redirect``
|
``redirect``
|
||||||
============
|
============
|
||||||
|
|
|
@ -112,7 +112,7 @@ standard error page for your application, along with an HTTP error code 404.
|
||||||
Example usage::
|
Example usage::
|
||||||
|
|
||||||
from django.http import Http404
|
from django.http import Http404
|
||||||
from django.shortcuts import render_to_response
|
from django.shortcuts import render
|
||||||
from polls.models import Poll
|
from polls.models import Poll
|
||||||
|
|
||||||
def detail(request, poll_id):
|
def detail(request, poll_id):
|
||||||
|
@ -120,7 +120,7 @@ Example usage::
|
||||||
p = Poll.objects.get(pk=poll_id)
|
p = Poll.objects.get(pk=poll_id)
|
||||||
except Poll.DoesNotExist:
|
except Poll.DoesNotExist:
|
||||||
raise Http404("Poll does not exist")
|
raise Http404("Poll does not exist")
|
||||||
return render_to_response('polls/detail.html', {'poll': p})
|
return render(request, 'polls/detail.html', {'poll': p})
|
||||||
|
|
||||||
In order to show customized HTML when Django returns a 404, you can create an
|
In order to show customized HTML when Django returns a 404, you can create an
|
||||||
HTML template named ``404.html`` and place it in the top level of your
|
HTML template named ``404.html`` and place it in the top level of your
|
||||||
|
|
|
@ -86,6 +86,7 @@ show how you can display the results. This example assumes you have a
|
||||||
The view function looks like this::
|
The view function looks like this::
|
||||||
|
|
||||||
from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger
|
from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger
|
||||||
|
from django.shortcuts import render
|
||||||
|
|
||||||
def listing(request):
|
def listing(request):
|
||||||
contact_list = Contacts.objects.all()
|
contact_list = Contacts.objects.all()
|
||||||
|
@ -101,7 +102,7 @@ The view function looks like this::
|
||||||
# If page is out of range (e.g. 9999), deliver last page of results.
|
# If page is out of range (e.g. 9999), deliver last page of results.
|
||||||
contacts = paginator.page(paginator.num_pages)
|
contacts = paginator.page(paginator.num_pages)
|
||||||
|
|
||||||
return render_to_response('list.html', {"contacts": contacts})
|
return render(request, 'list.html', {'contacts': contacts})
|
||||||
|
|
||||||
In the template :file:`list.html`, you'll want to include navigation between
|
In the template :file:`list.html`, you'll want to include navigation between
|
||||||
pages along with any interesting information from the objects themselves::
|
pages along with any interesting information from the objects themselves::
|
||||||
|
|
|
@ -256,9 +256,8 @@ templates, Django provides a shortcut function which automates the process.
|
||||||
An optional :class:`~django.http.HttpRequest` that will be available
|
An optional :class:`~django.http.HttpRequest` that will be available
|
||||||
during the template's rendering process.
|
during the template's rendering process.
|
||||||
|
|
||||||
See also the :func:`~django.shortcuts.render()` and
|
See also the :func:`~django.shortcuts.render()` shortcut which calls
|
||||||
:func:`~django.shortcuts.render_to_response()` shortcuts, which call
|
:func:`render_to_string()` and feeds the result into an
|
||||||
:func:`render_to_string()` and feed the result into an
|
|
||||||
:class:`~django.http.HttpResponse` suitable for returning from a view.
|
:class:`~django.http.HttpResponse` suitable for returning from a view.
|
||||||
|
|
||||||
Finally, you can use configured engines directly:
|
Finally, you can use configured engines directly:
|
||||||
|
|
Loading…
Reference in New Issue