Alphabetized imports in various docs.
Follow-up ofd97cce3409
and7d3fe36c62
.
This commit is contained in:
parent
1b7d524cfa
commit
35319bf12c
|
@ -105,7 +105,7 @@ template output the commas in a :ttag:`for` loop.
|
|||
Here's an example, which generates the same CSV file as above::
|
||||
|
||||
from django.http import HttpResponse
|
||||
from django.template import loader, Context
|
||||
from django.template import Content, loader
|
||||
|
||||
def some_view(request):
|
||||
# Create the HttpResponse object with the appropriate CSV header.
|
||||
|
|
|
@ -46,8 +46,8 @@ objects are file-like objects.
|
|||
|
||||
Here's a "Hello World" example::
|
||||
|
||||
from reportlab.pdfgen import canvas
|
||||
from django.http import HttpResponse
|
||||
from reportlab.pdfgen import canvas
|
||||
|
||||
def some_view(request):
|
||||
# Create the HttpResponse object with the appropriate PDF headers.
|
||||
|
|
|
@ -69,7 +69,7 @@ necessary:
|
|||
.. code-block:: python
|
||||
|
||||
# Import the models we created from our "news" app
|
||||
>>> from news.models import Reporter, Article
|
||||
>>> from news.models import Article, Reporter
|
||||
|
||||
# No reporters are in the system yet.
|
||||
>>> Reporter.objects.all()
|
||||
|
|
|
@ -383,7 +383,7 @@ the Python import path to your :file:`mysite/settings.py` file.
|
|||
|
||||
Once you're in the shell, explore the :doc:`database API </topics/db/queries>`::
|
||||
|
||||
>>> from polls.models import Question, Choice # Import the model classes we just wrote.
|
||||
>>> from polls.models import Choice, Question # Import the model classes we just wrote.
|
||||
|
||||
# No questions are in the system yet.
|
||||
>>> Question.objects.all()
|
||||
|
@ -469,7 +469,7 @@ the :doc:`time zone support docs </topics/i18n/timezones>`.
|
|||
Save these changes and start a new Python interactive shell by running
|
||||
``python manage.py shell`` again::
|
||||
|
||||
>>> from polls.models import Question, Choice
|
||||
>>> from polls.models import Choice, Question
|
||||
|
||||
# Make sure our __str__() addition worked.
|
||||
>>> Question.objects.all()
|
||||
|
|
|
@ -69,8 +69,8 @@ create a real version. Add the following to ``polls/views.py``:
|
|||
.. snippet::
|
||||
:filename: polls/views.py
|
||||
|
||||
from django.http import HttpResponse, HttpResponseRedirect
|
||||
from django.shortcuts import get_object_or_404, render
|
||||
from django.http import HttpResponseRedirect, HttpResponse
|
||||
from django.urls import reverse
|
||||
|
||||
from .models import Choice, Question
|
||||
|
@ -262,8 +262,8 @@ views and use Django's generic views instead. To do so, open the
|
|||
.. snippet::
|
||||
:filename: polls/views.py
|
||||
|
||||
from django.shortcuts import get_object_or_404, render
|
||||
from django.http import HttpResponseRedirect
|
||||
from django.shortcuts import get_object_or_404, render
|
||||
from django.urls import reverse
|
||||
from django.views import generic
|
||||
|
||||
|
|
|
@ -171,8 +171,8 @@ Put the following in the ``tests.py`` file in the ``polls`` application:
|
|||
|
||||
import datetime
|
||||
|
||||
from django.utils import timezone
|
||||
from django.test import TestCase
|
||||
from django.utils import timezone
|
||||
|
||||
from .models import Question
|
||||
|
||||
|
|
|
@ -38,8 +38,8 @@ many projects they are typically the most commonly used views.
|
|||
|
||||
**Example myapp/views.py**::
|
||||
|
||||
from django.views.generic.detail import DetailView
|
||||
from django.utils import timezone
|
||||
from django.views.generic.detail import DetailView
|
||||
|
||||
from articles.models import Article
|
||||
|
||||
|
@ -107,8 +107,8 @@ many projects they are typically the most commonly used views.
|
|||
|
||||
**Example views.py**::
|
||||
|
||||
from django.views.generic.list import ListView
|
||||
from django.utils import timezone
|
||||
from django.views.generic.list import ListView
|
||||
|
||||
from articles.models import Article
|
||||
|
||||
|
|
|
@ -15,8 +15,8 @@ editing content:
|
|||
Some of the examples on this page assume that an ``Author`` model has been
|
||||
defined as follows in ``myapp/models.py``::
|
||||
|
||||
from django.urls import reverse
|
||||
from django.db import models
|
||||
from django.urls import reverse
|
||||
|
||||
class Author(models.Model):
|
||||
name = models.CharField(max_length=200)
|
||||
|
@ -226,8 +226,8 @@ editing content:
|
|||
|
||||
**Example myapp/views.py**::
|
||||
|
||||
from django.views.generic.edit import DeleteView
|
||||
from django.urls import reverse_lazy
|
||||
from django.views.generic.edit import DeleteView
|
||||
from myapp.models import Author
|
||||
|
||||
class AuthorDelete(DeleteView):
|
||||
|
|
|
@ -220,8 +220,8 @@ example, you might write a simple export function that uses Django's
|
|||
:doc:`serialization functions </topics/serialization>` to dump some selected
|
||||
objects as JSON::
|
||||
|
||||
from django.http import HttpResponse
|
||||
from django.core import serializers
|
||||
from django.http import HttpResponse
|
||||
|
||||
def export_as_json(modeladmin, request, queryset):
|
||||
response = HttpResponse(content_type="application/json")
|
||||
|
|
|
@ -128,7 +128,7 @@ The ``register`` decorator
|
|||
argument::
|
||||
|
||||
from django.contrib import admin
|
||||
from .models import Author, Reader, Editor
|
||||
from .models import Author, Editor, Reader
|
||||
from myproject.admin_site import custom_admin_site
|
||||
|
||||
@admin.register(Author, Reader, Editor, site=custom_admin_site)
|
||||
|
@ -502,12 +502,12 @@ subclass::
|
|||
that we'd like to use for large text fields instead of the default
|
||||
``<textarea>``. Here's how we'd do that::
|
||||
|
||||
from django.db import models
|
||||
from django.contrib import admin
|
||||
from django.db import models
|
||||
|
||||
# Import our custom widget and our model from where they're defined
|
||||
from myapp.widgets import RichTextEditorWidget
|
||||
from myapp.models import MyModel
|
||||
from myapp.widgets import RichTextEditorWidget
|
||||
|
||||
class MyModelAdmin(admin.ModelAdmin):
|
||||
formfield_overrides = {
|
||||
|
@ -581,8 +581,8 @@ subclass::
|
|||
the same as the callable, but ``self`` in this context is the model
|
||||
instance. Here's a full model example::
|
||||
|
||||
from django.db import models
|
||||
from django.contrib import admin
|
||||
from django.db import models
|
||||
|
||||
class Person(models.Model):
|
||||
name = models.CharField(max_length=50)
|
||||
|
@ -616,8 +616,8 @@ subclass::
|
|||
|
||||
Here's a full example model::
|
||||
|
||||
from django.db import models
|
||||
from django.contrib import admin
|
||||
from django.db import models
|
||||
from django.utils.html import format_html
|
||||
|
||||
class Person(models.Model):
|
||||
|
@ -670,8 +670,8 @@ subclass::
|
|||
|
||||
Here's a full example model::
|
||||
|
||||
from django.db import models
|
||||
from django.contrib import admin
|
||||
from django.db import models
|
||||
|
||||
class Person(models.Model):
|
||||
first_name = models.CharField(max_length=50)
|
||||
|
@ -699,8 +699,8 @@ subclass::
|
|||
|
||||
For example::
|
||||
|
||||
from django.db import models
|
||||
from django.contrib import admin
|
||||
from django.db import models
|
||||
from django.utils.html import format_html
|
||||
|
||||
class Person(models.Model):
|
||||
|
@ -2572,8 +2572,8 @@ Using generic relations as an inline
|
|||
It is possible to use an inline with generically related objects. Let's say
|
||||
you have the following models::
|
||||
|
||||
from django.db import models
|
||||
from django.contrib.contenttypes.fields import GenericForeignKey
|
||||
from django.db import models
|
||||
|
||||
class Image(models.Model):
|
||||
image = models.ImageField(upload_to="images")
|
||||
|
@ -3001,7 +3001,7 @@ respectively::
|
|||
|
||||
# urls.py
|
||||
from django.urls import path
|
||||
from myproject.admin import basic_site, advanced_site
|
||||
from myproject.admin import advanced_site, basic_site
|
||||
|
||||
urlpatterns = [
|
||||
path('basic-admin/', basic_site.urls),
|
||||
|
@ -3111,7 +3111,7 @@ password box.
|
|||
|
||||
For example, to get a list of all additions done through the admin::
|
||||
|
||||
from django.contrib.admin.models import LogEntry, ADDITION
|
||||
from django.contrib.admin.models import ADDITION, LogEntry
|
||||
|
||||
LogEntry.objects.filter(action_flag=ADDITION)
|
||||
|
||||
|
|
|
@ -241,9 +241,9 @@ generic (sometimes called "polymorphic") relationships between models.
|
|||
|
||||
A simple example is a tagging system, which might look like this::
|
||||
|
||||
from django.db import models
|
||||
from django.contrib.contenttypes.fields import GenericForeignKey
|
||||
from django.contrib.contenttypes.models import ContentType
|
||||
from django.db import models
|
||||
|
||||
class TaggedItem(models.Model):
|
||||
tag = models.SlugField()
|
||||
|
@ -371,8 +371,8 @@ Reverse generic relations
|
|||
If you know which models you'll be using most often, you can also add
|
||||
a "reverse" generic relationship to enable an additional API. For example::
|
||||
|
||||
from django.db import models
|
||||
from django.contrib.contenttypes.fields import GenericRelation
|
||||
from django.db import models
|
||||
|
||||
class Bookmark(models.Model):
|
||||
url = models.URLField()
|
||||
|
|
|
@ -18,7 +18,7 @@ Example
|
|||
context of the units. In the example below, two different distance objects are
|
||||
instantiated in units of kilometers (``km``) and miles (``mi``)::
|
||||
|
||||
>>> from django.contrib.gis.measure import Distance, D
|
||||
>>> from django.contrib.gis.measure import D, Distance
|
||||
>>> d1 = Distance(km=5)
|
||||
>>> print(d1)
|
||||
5.0 km
|
||||
|
|
|
@ -620,7 +620,7 @@ example, coordinates will be expressed in `EPSG SRID 32140`__,
|
|||
a coordinate system specific to south Texas **only** and in units of
|
||||
**meters**, not degrees::
|
||||
|
||||
>>> from django.contrib.gis.geos import Point, GEOSGeometry
|
||||
>>> from django.contrib.gis.geos import GEOSGeometry, Point
|
||||
>>> pnt = Point(954158.1, 4215137.1, srid=32140)
|
||||
|
||||
Note that ``pnt`` may also be constructed with EWKT, an "extended" form of
|
||||
|
@ -722,7 +722,7 @@ Let's dive right in. Create a file called ``admin.py`` inside the
|
|||
Next, edit your ``urls.py`` in the ``geodjango`` application folder as follows::
|
||||
|
||||
from django.contrib.gis import admin
|
||||
from django.urls import path, include
|
||||
from django.urls import include, path
|
||||
|
||||
urlpatterns = [
|
||||
path('admin/', admin.site.urls),
|
||||
|
|
|
@ -26,8 +26,8 @@ Fields
|
|||
to render any HTML, but it is used to process the submitted data and
|
||||
validate it. For example::
|
||||
|
||||
>>> from django.contrib.postgres.forms import SimpleArrayField
|
||||
>>> from django import forms
|
||||
>>> from django.contrib.postgres.forms import SimpleArrayField
|
||||
|
||||
>>> class NumberListForm(forms.Form):
|
||||
... numbers = SimpleArrayField(forms.IntegerField())
|
||||
|
@ -48,8 +48,8 @@ Fields
|
|||
value is used to split the submitted data. It allows you to chain
|
||||
``SimpleArrayField`` for multidimensional data::
|
||||
|
||||
>>> from django.contrib.postgres.forms import SimpleArrayField
|
||||
>>> from django import forms
|
||||
>>> from django.contrib.postgres.forms import SimpleArrayField
|
||||
|
||||
>>> class GridForm(forms.Form):
|
||||
... places = SimpleArrayField(SimpleArrayField(IntegerField()), delimiter='|')
|
||||
|
|
|
@ -63,8 +63,8 @@ article is associated with one or more sites. In Django model terminology,
|
|||
that's represented by a :class:`~django.db.models.ManyToManyField` in the
|
||||
``Article`` model::
|
||||
|
||||
from django.db import models
|
||||
from django.contrib.sites.models import Site
|
||||
from django.db import models
|
||||
|
||||
class Article(models.Model):
|
||||
headline = models.CharField(max_length=200)
|
||||
|
@ -106,8 +106,8 @@ model in a many-to-one relationship, using
|
|||
For example, if an article is only allowed on a single site, you'd use a model
|
||||
like this::
|
||||
|
||||
from django.db import models
|
||||
from django.contrib.sites.models import Site
|
||||
from django.db import models
|
||||
|
||||
class Article(models.Model):
|
||||
headline = models.CharField(max_length=200)
|
||||
|
@ -218,7 +218,7 @@ different template directories (:setting:`DIRS <TEMPLATES-DIRS>`), you could
|
|||
simply farm out to the template system like so::
|
||||
|
||||
from django.core.mail import send_mail
|
||||
from django.template import loader, Context
|
||||
from django.template import Context, loader
|
||||
|
||||
def register_for_newsletter(request):
|
||||
# Check form values, etc., and subscribe the user.
|
||||
|
@ -325,9 +325,9 @@ with the current :class:`~django.contrib.sites.models.Site`.
|
|||
Use :class:`~django.contrib.sites.managers.CurrentSiteManager` by adding it to
|
||||
your model explicitly. For example::
|
||||
|
||||
from django.db import models
|
||||
from django.contrib.sites.models import Site
|
||||
from django.contrib.sites.managers import CurrentSiteManager
|
||||
from django.db import models
|
||||
|
||||
class Photo(models.Model):
|
||||
photo = models.FileField(upload_to='photos')
|
||||
|
@ -362,9 +362,9 @@ a parameter to
|
|||
model. The following model, which has a field called ``publish_on``,
|
||||
demonstrates this::
|
||||
|
||||
from django.db import models
|
||||
from django.contrib.sites.models import Site
|
||||
from django.contrib.sites.managers import CurrentSiteManager
|
||||
from django.db import models
|
||||
|
||||
class Photo(models.Model):
|
||||
photo = models.FileField(upload_to='photos')
|
||||
|
|
|
@ -367,7 +367,7 @@ Here's a full example::
|
|||
And the accompanying URLconf::
|
||||
|
||||
from django.urls import path
|
||||
from myproject.feeds import RssSiteNewsFeed, AtomSiteNewsFeed
|
||||
from myproject.feeds import AtomSiteNewsFeed, RssSiteNewsFeed
|
||||
|
||||
urlpatterns = [
|
||||
# ...
|
||||
|
|
|
@ -202,8 +202,8 @@ both is fine, and will incur minimal overhead.
|
|||
|
||||
Usage::
|
||||
|
||||
from django.views.decorators.csrf import csrf_protect
|
||||
from django.shortcuts import render
|
||||
from django.views.decorators.csrf import csrf_protect
|
||||
|
||||
@csrf_protect
|
||||
def my_view(request):
|
||||
|
@ -400,8 +400,8 @@ class-based views<decorating-class-based-views>`.
|
|||
This decorator marks a view as being exempt from the protection ensured by
|
||||
the middleware. Example::
|
||||
|
||||
from django.views.decorators.csrf import csrf_exempt
|
||||
from django.http import HttpResponse
|
||||
from django.views.decorators.csrf import csrf_exempt
|
||||
|
||||
@csrf_exempt
|
||||
def my_view(request):
|
||||
|
@ -417,8 +417,8 @@ class-based views<decorating-class-based-views>`.
|
|||
|
||||
Example::
|
||||
|
||||
from django.views.decorators.csrf import requires_csrf_token
|
||||
from django.shortcuts import render
|
||||
from django.views.decorators.csrf import requires_csrf_token
|
||||
|
||||
@requires_csrf_token
|
||||
def my_view(request):
|
||||
|
|
|
@ -229,8 +229,8 @@ defined on the :class:`~django.forms.Field` class itself with the
|
|||
Simple validators can be used to validate values inside the field, let's have
|
||||
a look at Django's ``SlugField``::
|
||||
|
||||
from django.forms import CharField
|
||||
from django.core import validators
|
||||
from django.forms import CharField
|
||||
|
||||
class SlugField(CharField):
|
||||
default_validators = [validators.validate_slug]
|
||||
|
|
|
@ -48,7 +48,7 @@ keyword.
|
|||
|
||||
Some examples::
|
||||
|
||||
>>> from django.db.models import When, F, Q
|
||||
>>> from django.db.models import F, Q, When
|
||||
>>> # String arguments refer to fields; the following two examples are equivalent:
|
||||
>>> When(account_type=Client.GOLD, then='name')
|
||||
>>> When(account_type=Client.GOLD, then=F('name'))
|
||||
|
@ -88,7 +88,7 @@ A simple example::
|
|||
|
||||
>>>
|
||||
>>> from datetime import date, timedelta
|
||||
>>> from django.db.models import CharField, Case, Value, When
|
||||
>>> from django.db.models import Case, CharField, Value, When
|
||||
>>> Client.objects.create(
|
||||
... name='Jane Doe',
|
||||
... account_type=Client.REGULAR,
|
||||
|
|
|
@ -979,7 +979,7 @@ than 0. If ``length`` is ``None``, then the rest of the string will be returned.
|
|||
Usage example::
|
||||
|
||||
>>> # Set the alias to the first 5 characters of the name as lowercase
|
||||
>>> from django.db.models.functions import Substr, Lower
|
||||
>>> from django.db.models.functions import Lower, Substr
|
||||
>>> Author.objects.create(name='Margaret Smith')
|
||||
>>> Author.objects.update(alias=Lower(Substr('name', 1, 5)))
|
||||
1
|
||||
|
|
|
@ -26,7 +26,7 @@ Some examples
|
|||
|
||||
.. code-block:: python
|
||||
|
||||
from django.db.models import F, Count, Value
|
||||
from django.db.models import Count, F, Value
|
||||
from django.db.models.functions import Length, Upper
|
||||
|
||||
# Find companies that have more employees than chairs.
|
||||
|
@ -252,7 +252,7 @@ is null) after companies that have been contacted::
|
|||
database functions like ``COALESCE`` and ``LOWER``, or aggregates like ``SUM``.
|
||||
They can be used directly::
|
||||
|
||||
from django.db.models import Func, F
|
||||
from django.db.models import F, Func
|
||||
|
||||
queryset.annotate(field_lower=Func(F('field'), function='LOWER'))
|
||||
|
||||
|
|
|
@ -277,7 +277,7 @@ will be stored in a special error dictionary key,
|
|||
:data:`~django.core.exceptions.NON_FIELD_ERRORS`. This key is used for errors
|
||||
that are tied to the entire model instead of to a specific field::
|
||||
|
||||
from django.core.exceptions import ValidationError, NON_FIELD_ERRORS
|
||||
from django.core.exceptions import NON_FIELD_ERRORS, ValidationError
|
||||
try:
|
||||
article.full_clean()
|
||||
except ValidationError as e:
|
||||
|
|
|
@ -176,7 +176,7 @@ view would raise a ``Http404`` error before redirecting to it::
|
|||
|
||||
from urllib.parse import urlparse
|
||||
from django.urls import resolve
|
||||
from django.http import HttpResponseRedirect, Http404
|
||||
from django.http import Http404, HttpResponseRedirect
|
||||
|
||||
def myview(request):
|
||||
next = request.META.get('HTTP_REFERER', None) or '/'
|
||||
|
|
|
@ -210,7 +210,7 @@ The default implementation simply adds the object being displayed to the
|
|||
template, but you can override it to send more::
|
||||
|
||||
from django.views.generic import DetailView
|
||||
from books.models import Publisher, Book
|
||||
from books.models import Book, Publisher
|
||||
|
||||
class PublisherDetail(DetailView):
|
||||
|
||||
|
@ -409,8 +409,8 @@ custom view::
|
|||
Then we'd write our new view -- ``get_object`` is the method that retrieves the
|
||||
object -- so we simply override it and wrap the call::
|
||||
|
||||
from django.views.generic import DetailView
|
||||
from django.utils import timezone
|
||||
from django.views.generic import DetailView
|
||||
from books.models import Author
|
||||
|
||||
class AuthorDetailView(DetailView):
|
||||
|
|
|
@ -99,8 +99,8 @@ First we need to add :meth:`~django.db.models.Model.get_absolute_url()` to our
|
|||
.. snippet::
|
||||
:filename: models.py
|
||||
|
||||
from django.urls import reverse
|
||||
from django.db import models
|
||||
from django.urls import reverse
|
||||
|
||||
class Author(models.Model):
|
||||
name = models.CharField(max_length=200)
|
||||
|
@ -115,8 +115,8 @@ here; we don't have to write any logic ourselves:
|
|||
.. snippet::
|
||||
:filename: views.py
|
||||
|
||||
from django.views.generic.edit import CreateView, UpdateView, DeleteView
|
||||
from django.urls import reverse_lazy
|
||||
from django.views.generic.edit import CreateView, DeleteView, UpdateView
|
||||
from myapp.models import Author
|
||||
|
||||
class AuthorCreate(CreateView):
|
||||
|
@ -150,7 +150,7 @@ Finally, we hook these new views into the URLconf:
|
|||
:filename: urls.py
|
||||
|
||||
from django.urls import path
|
||||
from myapp.views import AuthorCreate, AuthorUpdate, AuthorDelete
|
||||
from myapp.views import AuthorCreate, AuthorDelete, AuthorUpdate
|
||||
|
||||
urlpatterns = [
|
||||
# ...
|
||||
|
|
|
@ -521,8 +521,8 @@ write our own ``get_context_data()`` to make the
|
|||
``AuthorInterestForm`` available to the template. We'll skip the
|
||||
``get_object()`` override from before for clarity::
|
||||
|
||||
from django.views.generic import DetailView
|
||||
from django import forms
|
||||
from django.views.generic import DetailView
|
||||
from books.models import Author
|
||||
|
||||
class AuthorInterestForm(forms.Form):
|
||||
|
@ -542,8 +542,8 @@ can find the author we're talking about, and we have to remember to set
|
|||
``template_name`` to ensure that form errors will render the same
|
||||
template as ``AuthorDisplay`` is using on ``GET``::
|
||||
|
||||
from django.urls import reverse
|
||||
from django.http import HttpResponseForbidden
|
||||
from django.urls import reverse
|
||||
from django.views.generic import FormView
|
||||
from django.views.generic.detail import SingleObjectMixin
|
||||
|
||||
|
|
|
@ -277,7 +277,7 @@ For example, we can ask for all publishers, annotated with their respective
|
|||
total book stock counters (note how we use ``'book'`` to specify the
|
||||
``Publisher`` -> ``Book`` reverse foreign key hop)::
|
||||
|
||||
>>> from django.db.models import Count, Min, Sum, Avg
|
||||
>>> from django.db.models import Avg, Count, Min, Sum
|
||||
>>> Publisher.objects.annotate(Count('book'))
|
||||
|
||||
(Every ``Publisher`` in the resulting ``QuerySet`` will have an extra attribute
|
||||
|
@ -324,7 +324,7 @@ constraining the objects for which an annotation is calculated. For example,
|
|||
you can generate an annotated list of all books that have a title starting
|
||||
with "Django" using the query::
|
||||
|
||||
>>> from django.db.models import Count, Avg
|
||||
>>> from django.db.models import Avg, Count
|
||||
>>> Book.objects.filter(name__startswith="Django").annotate(num_authors=Count('authors'))
|
||||
|
||||
When used with an ``aggregate()`` clause, a filter has the effect of
|
||||
|
@ -578,6 +578,6 @@ For example, if you wanted to calculate the average number of authors per
|
|||
book you first annotate the set of books with the author count, then
|
||||
aggregate that author count, referencing the annotation field::
|
||||
|
||||
>>> from django.db.models import Count, Avg
|
||||
>>> from django.db.models import Avg, Count
|
||||
>>> Book.objects.annotate(num_authors=Count('authors')).aggregate(Avg('num_authors'))
|
||||
{'num_authors__avg': 1.66}
|
||||
|
|
|
@ -192,7 +192,7 @@ Here's an example view that takes a ``subject``, ``message`` and ``from_email``
|
|||
from the request's POST data, sends that to admin@example.com and redirects to
|
||||
"/contact/thanks/" when it's done::
|
||||
|
||||
from django.core.mail import send_mail, BadHeaderError
|
||||
from django.core.mail import BadHeaderError, send_mail
|
||||
from django.http import HttpResponse, HttpResponseRedirect
|
||||
|
||||
def send_email(request):
|
||||
|
|
|
@ -140,8 +140,8 @@ the proper storage for that file), you can use file storage systems directly.
|
|||
You can create an instance of some custom file storage class, or -- often more
|
||||
useful -- you can use the global default storage system::
|
||||
|
||||
>>> from django.core.files.storage import default_storage
|
||||
>>> from django.core.files.base import ContentFile
|
||||
>>> from django.core.files.storage import default_storage
|
||||
|
||||
>>> path = default_storage.save('/path/to/file', ContentFile('new content'))
|
||||
>>> path
|
||||
|
@ -169,8 +169,8 @@ which implements basic local filesystem file storage.
|
|||
For example, the following code will store uploaded files under
|
||||
``/media/photos`` regardless of what your :setting:`MEDIA_ROOT` setting is::
|
||||
|
||||
from django.db import models
|
||||
from django.core.files.storage import FileSystemStorage
|
||||
from django.db import models
|
||||
|
||||
fs = FileSystemStorage(location='/media/photos')
|
||||
|
||||
|
|
|
@ -279,8 +279,8 @@ want it to be published:
|
|||
.. snippet::
|
||||
:filename: views.py
|
||||
|
||||
from django.shortcuts import render
|
||||
from django.http import HttpResponseRedirect
|
||||
from django.shortcuts import render
|
||||
|
||||
from .forms import NameForm
|
||||
|
||||
|
|
|
@ -295,8 +295,8 @@ You can override the error messages from ``NON_FIELD_ERRORS`` raised by model
|
|||
validation by adding the :data:`~django.core.exceptions.NON_FIELD_ERRORS` key
|
||||
to the ``error_messages`` dictionary of the ``ModelForm``’s inner ``Meta`` class::
|
||||
|
||||
from django.forms import ModelForm
|
||||
from django.core.exceptions import NON_FIELD_ERRORS
|
||||
from django.forms import ModelForm
|
||||
|
||||
class ArticleForm(ModelForm):
|
||||
class Meta:
|
||||
|
@ -573,7 +573,7 @@ fields like you would in a regular ``Form``.
|
|||
If you want to specify a field's validators, you can do so by defining
|
||||
the field declaratively and setting its ``validators`` parameter::
|
||||
|
||||
from django.forms import ModelForm, CharField
|
||||
from django.forms import CharField, ModelForm
|
||||
from myapp.models import Article
|
||||
|
||||
class ArticleForm(ModelForm):
|
||||
|
|
|
@ -168,7 +168,7 @@ For example::
|
|||
Register custom converter classes in your URLconf using
|
||||
:func:`~django.urls.register_converter`::
|
||||
|
||||
from django.urls import register_converter, path
|
||||
from django.urls import path, register_converter
|
||||
|
||||
from . import converters, views
|
||||
|
||||
|
@ -614,8 +614,8 @@ You can obtain these in template code by using:
|
|||
|
||||
Or in Python code::
|
||||
|
||||
from django.urls import reverse
|
||||
from django.http import HttpResponseRedirect
|
||||
from django.urls import reverse
|
||||
|
||||
def redirect_to_year(request):
|
||||
# ...
|
||||
|
|
|
@ -84,8 +84,8 @@ as a shorter alias, ``_``, to save typing.
|
|||
In this example, the text ``"Welcome to my site."`` is marked as a translation
|
||||
string::
|
||||
|
||||
from django.utils.translation import gettext as _
|
||||
from django.http import HttpResponse
|
||||
from django.utils.translation import gettext as _
|
||||
|
||||
def my_view(request):
|
||||
output = _("Welcome to my site.")
|
||||
|
@ -94,8 +94,8 @@ string::
|
|||
Obviously, you could code this without using the alias. This example is
|
||||
identical to the previous one::
|
||||
|
||||
from django.utils.translation import gettext
|
||||
from django.http import HttpResponse
|
||||
from django.utils.translation import gettext
|
||||
|
||||
def my_view(request):
|
||||
output = gettext("Welcome to my site.")
|
||||
|
@ -205,8 +205,8 @@ of its value.)
|
|||
|
||||
For example::
|
||||
|
||||
from django.utils.translation import ngettext
|
||||
from django.http import HttpResponse
|
||||
from django.utils.translation import ngettext
|
||||
|
||||
def hello_world(request, count):
|
||||
page = ngettext(
|
||||
|
|
|
@ -86,7 +86,7 @@ show how you can display the results. This example assumes you have a
|
|||
|
||||
The view function looks like this::
|
||||
|
||||
from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger
|
||||
from django.core.paginator import EmptyPage, PageNotAnInteger, Paginator
|
||||
from django.shortcuts import render
|
||||
|
||||
def listing(request):
|
||||
|
|
|
@ -38,7 +38,7 @@ Example
|
|||
The following is a simple unit test using the request factory::
|
||||
|
||||
from django.contrib.auth.models import AnonymousUser, User
|
||||
from django.test import TestCase, RequestFactory
|
||||
from django.test import RequestFactory, TestCase
|
||||
|
||||
from .views import MyView, my_view
|
||||
|
||||
|
|
|
@ -1023,7 +1023,7 @@ If you want to use a different ``Client`` class (for example, a subclass
|
|||
with customized behavior), use the :attr:`~SimpleTestCase.client_class` class
|
||||
attribute::
|
||||
|
||||
from django.test import TestCase, Client
|
||||
from django.test import Client, TestCase
|
||||
|
||||
class MyTestClient(Client):
|
||||
# Specialized methods for your environment
|
||||
|
|
Loading…
Reference in New Issue