mirror of
				https://github.com/django/django.git
				synced 2025-10-31 09:41:08 +00:00 
			
		
		
		
	[4.1.x] Fixed docs build with sphinxcontrib-spelling 7.5.0+.
sphinxcontrib-spelling 7.5.0+ includes captions of figures in the set
of nodes for which the text is checked.
Backport of ac90529cc5 from main
			
			
This commit is contained in:
		
							
								
								
									
										1
									
								
								docs/_theme/djangodocs/static/djangodocs.css
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								docs/_theme/djangodocs/static/djangodocs.css
									
									
									
									
										vendored
									
									
								
							| @@ -103,6 +103,7 @@ dt .literal, table .literal { background:none; } | |||||||
| #bd a.reference { text-decoration: none; } | #bd a.reference { text-decoration: none; } | ||||||
| #bd a.reference tt.literal { border-bottom: 1px #234f32 dotted; } | #bd a.reference tt.literal { border-bottom: 1px #234f32 dotted; } | ||||||
| div.code-block-caption { color: white; background-color: #234F32; margin: 0; padding: 2px 5px; width: 100%; font-family: monospace; font-size: small; line-height: 1.3em; } | div.code-block-caption { color: white; background-color: #234F32; margin: 0; padding: 2px 5px; width: 100%; font-family: monospace; font-size: small; line-height: 1.3em; } | ||||||
|  | div.code-block-caption .literal {color: white; } | ||||||
| div.literal-block-wrapper pre { margin-top: 0; } | div.literal-block-wrapper pre { margin-top: 0; } | ||||||
|  |  | ||||||
| /* Restore colors of pygments hyperlinked code */ | /* Restore colors of pygments hyperlinked code */ | ||||||
|   | |||||||
| @@ -112,7 +112,7 @@ For example, you can use this technique to add a custom logo to the | |||||||
| ``admin/base_site.html`` template: | ``admin/base_site.html`` template: | ||||||
|  |  | ||||||
|     .. code-block:: html+django |     .. code-block:: html+django | ||||||
|        :caption: templates/admin/base_site.html |        :caption: ``templates/admin/base_site.html`` | ||||||
|  |  | ||||||
|         {% extends "admin/base_site.html" %} |         {% extends "admin/base_site.html" %} | ||||||
|  |  | ||||||
|   | |||||||
| @@ -40,7 +40,7 @@ You can also provide hints that will be passed to the :meth:`allow_migrate()` | |||||||
| method of database routers as ``**hints``: | method of database routers as ``**hints``: | ||||||
|  |  | ||||||
| .. code-block:: python | .. code-block:: python | ||||||
|     :caption: myapp/dbrouters.py |     :caption: ``myapp/dbrouters.py`` | ||||||
|  |  | ||||||
|     class MyRouter: |     class MyRouter: | ||||||
|  |  | ||||||
| @@ -98,7 +98,7 @@ the respective field according to your needs. | |||||||
|   ``AlterField``, and add imports of ``uuid`` and ``models``. For example: |   ``AlterField``, and add imports of ``uuid`` and ``models``. For example: | ||||||
|  |  | ||||||
|   .. code-block:: python |   .. code-block:: python | ||||||
|     :caption: 0006_remove_uuid_null.py |     :caption: ``0006_remove_uuid_null.py`` | ||||||
|  |  | ||||||
|     # Generated by Django A.B on YYYY-MM-DD HH:MM |     # Generated by Django A.B on YYYY-MM-DD HH:MM | ||||||
|     from django.db import migrations, models |     from django.db import migrations, models | ||||||
| @@ -122,7 +122,7 @@ the respective field according to your needs. | |||||||
|   similar to this: |   similar to this: | ||||||
|  |  | ||||||
|   .. code-block:: python |   .. code-block:: python | ||||||
|     :caption: 0004_add_uuid_field.py |     :caption: ``0004_add_uuid_field.py`` | ||||||
|  |  | ||||||
|     class Migration(migrations.Migration): |     class Migration(migrations.Migration): | ||||||
|  |  | ||||||
| @@ -149,7 +149,7 @@ the respective field according to your needs. | |||||||
|   of ``uuid``. For example: |   of ``uuid``. For example: | ||||||
|  |  | ||||||
|   .. code-block:: python |   .. code-block:: python | ||||||
|     :caption: 0005_populate_uuid_values.py |     :caption: ``0005_populate_uuid_values.py`` | ||||||
|  |  | ||||||
|     # Generated by Django A.B on YYYY-MM-DD HH:MM |     # Generated by Django A.B on YYYY-MM-DD HH:MM | ||||||
|     from django.db import migrations |     from django.db import migrations | ||||||
| @@ -283,7 +283,7 @@ project anywhere without first installing and then uninstalling the old app. | |||||||
| Here's a sample migration: | Here's a sample migration: | ||||||
|  |  | ||||||
| .. code-block:: python | .. code-block:: python | ||||||
|     :caption: myapp/migrations/0124_move_old_app_to_new_app.py |     :caption: ``myapp/migrations/0124_move_old_app_to_new_app.py`` | ||||||
|  |  | ||||||
|     from django.apps import apps as global_apps |     from django.apps import apps as global_apps | ||||||
|     from django.db import migrations |     from django.db import migrations | ||||||
|   | |||||||
| @@ -171,7 +171,7 @@ Imports | |||||||
|   For example (comments are for explanatory purposes only): |   For example (comments are for explanatory purposes only): | ||||||
|  |  | ||||||
|   .. code-block:: python |   .. code-block:: python | ||||||
|       :caption: django/contrib/admin/example.py |       :caption: ``django/contrib/admin/example.py`` | ||||||
|  |  | ||||||
|       # future |       # future | ||||||
|       from __future__ import unicode_literals |       from __future__ import unicode_literals | ||||||
|   | |||||||
| @@ -564,7 +564,7 @@ Since this pattern involves a lot of boilerplate, Django provides the | |||||||
|     installed, you should pass the set of targeted ``app_label`` as arguments: |     installed, you should pass the set of targeted ``app_label`` as arguments: | ||||||
|  |  | ||||||
|     .. code-block:: python |     .. code-block:: python | ||||||
|         :caption: tests/app_label/tests.py |         :caption: ``tests/app_label/tests.py`` | ||||||
|  |  | ||||||
|         from django.db import models |         from django.db import models | ||||||
|         from django.test import SimpleTestCase |         from django.test import SimpleTestCase | ||||||
|   | |||||||
| @@ -63,7 +63,7 @@ You'll need a few things before getting started: | |||||||
| * Access to Django's record on PyPI. Create a file with your credentials: | * Access to Django's record on PyPI. Create a file with your credentials: | ||||||
|  |  | ||||||
|   .. code-block:: ini |   .. code-block:: ini | ||||||
|     :caption: ~/.pypirc |     :caption: ``~/.pypirc`` | ||||||
|  |  | ||||||
|     [pypi] |     [pypi] | ||||||
|     username:YourUsername |     username:YourUsername | ||||||
|   | |||||||
| @@ -26,7 +26,7 @@ representing your models -- so far, it's been solving many years' worth of | |||||||
| database-schema problems. Here's a quick example: | database-schema problems. Here's a quick example: | ||||||
|  |  | ||||||
| .. code-block:: python | .. code-block:: python | ||||||
|     :caption: mysite/news/models.py |     :caption: ``mysite/news/models.py`` | ||||||
|  |  | ||||||
|     from django.db import models |     from django.db import models | ||||||
|  |  | ||||||
| @@ -146,7 +146,7 @@ a website that lets authenticated users add, change and delete objects. The | |||||||
| only step required is to register your model in the admin site: | only step required is to register your model in the admin site: | ||||||
|  |  | ||||||
| .. code-block:: python | .. code-block:: python | ||||||
|     :caption: mysite/news/models.py |     :caption: ``mysite/news/models.py`` | ||||||
|  |  | ||||||
|     from django.db import models |     from django.db import models | ||||||
|  |  | ||||||
| @@ -157,7 +157,7 @@ only step required is to register your model in the admin site: | |||||||
|         reporter = models.ForeignKey(Reporter, on_delete=models.CASCADE) |         reporter = models.ForeignKey(Reporter, on_delete=models.CASCADE) | ||||||
|  |  | ||||||
| .. code-block:: python | .. code-block:: python | ||||||
|     :caption: mysite/news/admin.py |     :caption: ``mysite/news/admin.py`` | ||||||
|  |  | ||||||
|     from django.contrib import admin |     from django.contrib import admin | ||||||
|  |  | ||||||
| @@ -189,7 +189,7 @@ Here's what a URLconf might look like for the ``Reporter``/``Article`` | |||||||
| example above: | example above: | ||||||
|  |  | ||||||
| .. code-block:: python | .. code-block:: python | ||||||
|     :caption: mysite/news/urls.py |     :caption: ``mysite/news/urls.py`` | ||||||
|  |  | ||||||
|     from django.urls import path |     from django.urls import path | ||||||
|  |  | ||||||
| @@ -229,7 +229,7 @@ and renders the template with the retrieved data. Here's an example view for | |||||||
| ``year_archive`` from above: | ``year_archive`` from above: | ||||||
|  |  | ||||||
| .. code-block:: python | .. code-block:: python | ||||||
|     :caption: mysite/news/views.py |     :caption: ``mysite/news/views.py`` | ||||||
|  |  | ||||||
|     from django.shortcuts import render |     from django.shortcuts import render | ||||||
|  |  | ||||||
| @@ -258,7 +258,7 @@ Let's say the ``news/year_archive.html`` template was found. Here's what that | |||||||
| might look like: | might look like: | ||||||
|  |  | ||||||
| .. code-block:: html+django | .. code-block:: html+django | ||||||
|     :caption: mysite/news/templates/news/year_archive.html |     :caption: ``mysite/news/templates/news/year_archive.html`` | ||||||
|  |  | ||||||
|     {% extends "base.html" %} |     {% extends "base.html" %} | ||||||
|  |  | ||||||
| @@ -299,7 +299,7 @@ Here's what the "base.html" template, including the use of :doc:`static files | |||||||
| </howto/static-files/index>`, might look like: | </howto/static-files/index>`, might look like: | ||||||
|  |  | ||||||
| .. code-block:: html+django | .. code-block:: html+django | ||||||
|     :caption: mysite/templates/base.html |     :caption: ``mysite/templates/base.html`` | ||||||
|  |  | ||||||
|     {% load static %} |     {% load static %} | ||||||
|     <html> |     <html> | ||||||
|   | |||||||
| @@ -144,7 +144,7 @@ this. For a small app like polls, this process isn't too difficult. | |||||||
| #. Create a file ``django-polls/README.rst`` with the following contents: | #. Create a file ``django-polls/README.rst`` with the following contents: | ||||||
|  |  | ||||||
|    .. code-block:: rst |    .. code-block:: rst | ||||||
|        :caption: django-polls/README.rst |        :caption: ``django-polls/README.rst`` | ||||||
|  |  | ||||||
|        ===== |        ===== | ||||||
|        Polls |        Polls | ||||||
| @@ -192,14 +192,14 @@ this. For a small app like polls, this process isn't too difficult. | |||||||
|    following contents: |    following contents: | ||||||
|  |  | ||||||
|    .. code-block:: toml |    .. code-block:: toml | ||||||
|         :caption: django-polls/pyproject.toml |         :caption: ``django-polls/pyproject.toml`` | ||||||
|  |  | ||||||
|         [build-system] |         [build-system] | ||||||
|         requires = ['setuptools>=40.8.0', 'wheel'] |         requires = ['setuptools>=40.8.0', 'wheel'] | ||||||
|         build-backend = 'setuptools.build_meta:__legacy__' |         build-backend = 'setuptools.build_meta:__legacy__' | ||||||
|  |  | ||||||
|    .. code-block:: ini |    .. code-block:: ini | ||||||
|         :caption: django-polls/setup.cfg |         :caption: ``django-polls/setup.cfg`` | ||||||
|  |  | ||||||
|         [metadata] |         [metadata] | ||||||
|         name = django-polls |         name = django-polls | ||||||
| @@ -233,7 +233,7 @@ this. For a small app like polls, this process isn't too difficult. | |||||||
|             Django >= X.Y  # Replace "X.Y" as appropriate |             Django >= X.Y  # Replace "X.Y" as appropriate | ||||||
|  |  | ||||||
|    .. code-block:: python |    .. code-block:: python | ||||||
|         :caption: django-polls/setup.py |         :caption: ``django-polls/setup.py`` | ||||||
|  |  | ||||||
|         from setuptools import setup |         from setuptools import setup | ||||||
|  |  | ||||||
| @@ -247,7 +247,7 @@ this. For a small app like polls, this process isn't too difficult. | |||||||
|    contents: |    contents: | ||||||
|  |  | ||||||
|    .. code-block:: text |    .. code-block:: text | ||||||
|        :caption: django-polls/MANIFEST.in |        :caption: ``django-polls/MANIFEST.in`` | ||||||
|  |  | ||||||
|        include LICENSE |        include LICENSE | ||||||
|        include README.rst |        include README.rst | ||||||
|   | |||||||
| @@ -245,7 +245,7 @@ Let's write the first view. Open the file ``polls/views.py`` | |||||||
| and put the following Python code in it: | and put the following Python code in it: | ||||||
|  |  | ||||||
| .. code-block:: python | .. code-block:: python | ||||||
|     :caption: polls/views.py |     :caption: ``polls/views.py`` | ||||||
|  |  | ||||||
|     from django.http import HttpResponse |     from django.http import HttpResponse | ||||||
|  |  | ||||||
| @@ -273,7 +273,7 @@ Your app directory should now look like:: | |||||||
| In the ``polls/urls.py`` file include the following code: | In the ``polls/urls.py`` file include the following code: | ||||||
|  |  | ||||||
| .. code-block:: python | .. code-block:: python | ||||||
|     :caption: polls/urls.py |     :caption: ``polls/urls.py`` | ||||||
|  |  | ||||||
|     from django.urls import path |     from django.urls import path | ||||||
|  |  | ||||||
| @@ -288,7 +288,7 @@ The next step is to point the root URLconf at the ``polls.urls`` module. In | |||||||
| :func:`~django.urls.include` in the ``urlpatterns`` list, so you have: | :func:`~django.urls.include` in the ``urlpatterns`` list, so you have: | ||||||
|  |  | ||||||
| .. code-block:: python | .. code-block:: python | ||||||
|     :caption: mysite/urls.py |     :caption: ``mysite/urls.py`` | ||||||
|  |  | ||||||
|     from django.contrib import admin |     from django.contrib import admin | ||||||
|     from django.urls import include, path |     from django.urls import include, path | ||||||
|   | |||||||
| @@ -141,7 +141,7 @@ These concepts are represented by Python classes. Edit the | |||||||
| :file:`polls/models.py` file so it looks like this: | :file:`polls/models.py` file so it looks like this: | ||||||
|  |  | ||||||
| .. code-block:: python | .. code-block:: python | ||||||
|     :caption: polls/models.py |     :caption: ``polls/models.py`` | ||||||
|  |  | ||||||
|     from django.db import models |     from django.db import models | ||||||
|  |  | ||||||
| @@ -217,7 +217,7 @@ add that dotted path to the :setting:`INSTALLED_APPS` setting. It'll look like | |||||||
| this: | this: | ||||||
|  |  | ||||||
| .. code-block:: python | .. code-block:: python | ||||||
|     :caption: mysite/settings.py |     :caption: ``mysite/settings.py`` | ||||||
|  |  | ||||||
|     INSTALLED_APPS = [ |     INSTALLED_APPS = [ | ||||||
|         'polls.apps.PollsConfig', |         'polls.apps.PollsConfig', | ||||||
| @@ -424,7 +424,7 @@ representation of this object. Let's fix that by editing the ``Question`` model | |||||||
| ``Choice``: | ``Choice``: | ||||||
|  |  | ||||||
| .. code-block:: python | .. code-block:: python | ||||||
|     :caption: polls/models.py |     :caption: ``polls/models.py`` | ||||||
|  |  | ||||||
|     from django.db import models |     from django.db import models | ||||||
|  |  | ||||||
| @@ -448,7 +448,7 @@ automatically-generated admin. | |||||||
| Let's also add a custom method to this model: | Let's also add a custom method to this model: | ||||||
|  |  | ||||||
| .. code-block:: python | .. code-block:: python | ||||||
|     :caption: polls/models.py |     :caption: ``polls/models.py`` | ||||||
|  |  | ||||||
|     import datetime |     import datetime | ||||||
|  |  | ||||||
| @@ -646,7 +646,7 @@ have an admin interface. To do this, open the :file:`polls/admin.py` file, and | |||||||
| edit it to look like this: | edit it to look like this: | ||||||
|  |  | ||||||
| .. code-block:: python | .. code-block:: python | ||||||
|     :caption: polls/admin.py |     :caption: ``polls/admin.py`` | ||||||
|  |  | ||||||
|     from django.contrib import admin |     from django.contrib import admin | ||||||
|  |  | ||||||
|   | |||||||
| @@ -70,7 +70,7 @@ Now let's add a few more views to ``polls/views.py``. These views are | |||||||
| slightly different, because they take an argument: | slightly different, because they take an argument: | ||||||
|  |  | ||||||
| .. code-block:: python | .. code-block:: python | ||||||
|     :caption: polls/views.py |     :caption: ``polls/views.py`` | ||||||
|  |  | ||||||
|     def detail(request, question_id): |     def detail(request, question_id): | ||||||
|         return HttpResponse("You're looking at question %s." % question_id) |         return HttpResponse("You're looking at question %s." % question_id) | ||||||
| @@ -86,7 +86,7 @@ Wire these new views into the ``polls.urls`` module by adding the following | |||||||
| :func:`~django.urls.path` calls: | :func:`~django.urls.path` calls: | ||||||
|  |  | ||||||
| .. code-block:: python | .. code-block:: python | ||||||
|     :caption: polls/urls.py |     :caption: ``polls/urls.py`` | ||||||
|  |  | ||||||
|     from django.urls import path |     from django.urls import path | ||||||
|  |  | ||||||
| @@ -147,7 +147,7 @@ view, which displays the latest 5 poll questions in the system, separated by | |||||||
| commas, according to publication date: | commas, according to publication date: | ||||||
|  |  | ||||||
| .. code-block:: python | .. code-block:: python | ||||||
|     :caption: polls/views.py |     :caption: ``polls/views.py`` | ||||||
|  |  | ||||||
|     from django.http import HttpResponse |     from django.http import HttpResponse | ||||||
|  |  | ||||||
| @@ -196,7 +196,7 @@ Django as ``polls/index.html``. | |||||||
| Put the following code in that template: | Put the following code in that template: | ||||||
|  |  | ||||||
| .. code-block:: html+django | .. code-block:: html+django | ||||||
|     :caption: polls/templates/polls/index.html |     :caption: ``polls/templates/polls/index.html`` | ||||||
|  |  | ||||||
|     {% if latest_question_list %} |     {% if latest_question_list %} | ||||||
|         <ul> |         <ul> | ||||||
| @@ -218,7 +218,7 @@ __ https://developer.mozilla.org/en-US/docs/Learn/HTML/Introduction_to_HTML/Gett | |||||||
| Now let's update our ``index`` view in ``polls/views.py`` to use the template: | Now let's update our ``index`` view in ``polls/views.py`` to use the template: | ||||||
|  |  | ||||||
| .. code-block:: python | .. code-block:: python | ||||||
|     :caption: polls/views.py |     :caption: ``polls/views.py`` | ||||||
|  |  | ||||||
|     from django.http import HttpResponse |     from django.http import HttpResponse | ||||||
|     from django.template import loader |     from django.template import loader | ||||||
| @@ -251,7 +251,7 @@ template. Django provides a shortcut. Here's the full ``index()`` view, | |||||||
| rewritten: | rewritten: | ||||||
|  |  | ||||||
| .. code-block:: python | .. code-block:: python | ||||||
|     :caption: polls/views.py |     :caption: ``polls/views.py`` | ||||||
|  |  | ||||||
|     from django.shortcuts import render |     from django.shortcuts import render | ||||||
|  |  | ||||||
| @@ -280,7 +280,7 @@ Now, let's tackle the question detail view -- the page that displays the questio | |||||||
| for a given poll. Here's the view: | for a given poll. Here's the view: | ||||||
|  |  | ||||||
| .. code-block:: python | .. code-block:: python | ||||||
|     :caption: polls/views.py |     :caption: ``polls/views.py`` | ||||||
|  |  | ||||||
|     from django.http import Http404 |     from django.http import Http404 | ||||||
|     from django.shortcuts import render |     from django.shortcuts import render | ||||||
| @@ -302,7 +302,7 @@ later, but if you'd like to quickly get the above example working, a file | |||||||
| containing just: | containing just: | ||||||
|  |  | ||||||
| .. code-block:: html+django | .. code-block:: html+django | ||||||
|     :caption: polls/templates/polls/detail.html |     :caption: ``polls/templates/polls/detail.html`` | ||||||
|  |  | ||||||
|     {{ question }} |     {{ question }} | ||||||
|  |  | ||||||
| @@ -316,7 +316,7 @@ and raise :exc:`~django.http.Http404` if the object doesn't exist. Django | |||||||
| provides a shortcut. Here's the ``detail()`` view, rewritten: | provides a shortcut. Here's the ``detail()`` view, rewritten: | ||||||
|  |  | ||||||
| .. code-block:: python | .. code-block:: python | ||||||
|     :caption: polls/views.py |     :caption: ``polls/views.py`` | ||||||
|  |  | ||||||
|     from django.shortcuts import get_object_or_404, render |     from django.shortcuts import get_object_or_404, render | ||||||
|  |  | ||||||
| @@ -358,7 +358,7 @@ variable ``question``, here's what the ``polls/detail.html`` template might look | |||||||
| like: | like: | ||||||
|  |  | ||||||
| .. code-block:: html+django | .. code-block:: html+django | ||||||
|     :caption: polls/templates/polls/detail.html |     :caption: ``polls/templates/polls/detail.html`` | ||||||
|  |  | ||||||
|     <h1>{{ question.question_text }}</h1> |     <h1>{{ question.question_text }}</h1> | ||||||
|     <ul> |     <ul> | ||||||
| @@ -432,7 +432,7 @@ The answer is to add namespaces to your  URLconf. In the ``polls/urls.py`` | |||||||
| file, go ahead and add an ``app_name`` to set the application namespace: | file, go ahead and add an ``app_name`` to set the application namespace: | ||||||
|  |  | ||||||
| .. code-block:: python | .. code-block:: python | ||||||
|     :caption: polls/urls.py |     :caption: ``polls/urls.py`` | ||||||
|  |  | ||||||
|     from django.urls import path |     from django.urls import path | ||||||
|  |  | ||||||
| @@ -449,14 +449,14 @@ file, go ahead and add an ``app_name`` to set the application namespace: | |||||||
| Now change your ``polls/index.html`` template from: | Now change your ``polls/index.html`` template from: | ||||||
|  |  | ||||||
| .. code-block:: html+django | .. code-block:: html+django | ||||||
|     :caption: polls/templates/polls/index.html |     :caption: ``polls/templates/polls/index.html`` | ||||||
|  |  | ||||||
|     <li><a href="{% url 'detail' question.id %}">{{ question.question_text }}</a></li> |     <li><a href="{% url 'detail' question.id %}">{{ question.question_text }}</a></li> | ||||||
|  |  | ||||||
| to point at the namespaced detail view: | to point at the namespaced detail view: | ||||||
|  |  | ||||||
| .. code-block:: html+django | .. code-block:: html+django | ||||||
|     :caption: polls/templates/polls/index.html |     :caption: ``polls/templates/polls/index.html`` | ||||||
|  |  | ||||||
|     <li><a href="{% url 'polls:detail' question.id %}">{{ question.question_text }}</a></li> |     <li><a href="{% url 'polls:detail' question.id %}">{{ question.question_text }}</a></li> | ||||||
|  |  | ||||||
|   | |||||||
| @@ -18,7 +18,7 @@ Let's update our poll detail template ("polls/detail.html") from the last | |||||||
| tutorial, so that the template contains an HTML ``<form>`` element: | tutorial, so that the template contains an HTML ``<form>`` element: | ||||||
|  |  | ||||||
| .. code-block:: html+django | .. code-block:: html+django | ||||||
|     :caption: polls/templates/polls/detail.html |     :caption: ``polls/templates/polls/detail.html`` | ||||||
|  |  | ||||||
|     <form action="{% url 'polls:vote' question.id %}" method="post"> |     <form action="{% url 'polls:vote' question.id %}" method="post"> | ||||||
|     {% csrf_token %} |     {% csrf_token %} | ||||||
| @@ -64,7 +64,7 @@ something with it. Remember, in :doc:`Tutorial 3 </intro/tutorial03>`, we | |||||||
| created a URLconf for the polls application that includes this line: | created a URLconf for the polls application that includes this line: | ||||||
|  |  | ||||||
| .. code-block:: python | .. code-block:: python | ||||||
|     :caption: polls/urls.py |     :caption: ``polls/urls.py`` | ||||||
|  |  | ||||||
|     path('<int:question_id>/vote/', views.vote, name='vote'), |     path('<int:question_id>/vote/', views.vote, name='vote'), | ||||||
|  |  | ||||||
| @@ -72,7 +72,7 @@ We also created a dummy implementation of the ``vote()`` function. Let's | |||||||
| create a real version. Add the following to ``polls/views.py``: | create a real version. Add the following to ``polls/views.py``: | ||||||
|  |  | ||||||
| .. code-block:: python | .. code-block:: python | ||||||
|     :caption: polls/views.py |     :caption: ``polls/views.py`` | ||||||
|  |  | ||||||
|     from django.http import HttpResponse, HttpResponseRedirect |     from django.http import HttpResponse, HttpResponseRedirect | ||||||
|     from django.shortcuts import get_object_or_404, render |     from django.shortcuts import get_object_or_404, render | ||||||
| @@ -152,7 +152,7 @@ After somebody votes in a question, the ``vote()`` view redirects to the results | |||||||
| page for the question. Let's write that view: | page for the question. Let's write that view: | ||||||
|  |  | ||||||
| .. code-block:: python | .. code-block:: python | ||||||
|     :caption: polls/views.py |     :caption: ``polls/views.py`` | ||||||
|  |  | ||||||
|     from django.shortcuts import get_object_or_404, render |     from django.shortcuts import get_object_or_404, render | ||||||
|  |  | ||||||
| @@ -168,7 +168,7 @@ redundancy later. | |||||||
| Now, create a ``polls/results.html`` template: | Now, create a ``polls/results.html`` template: | ||||||
|  |  | ||||||
| .. code-block:: html+django | .. code-block:: html+django | ||||||
|     :caption: polls/templates/polls/results.html |     :caption: ``polls/templates/polls/results.html`` | ||||||
|  |  | ||||||
|     <h1>{{ question.question_text }}</h1> |     <h1>{{ question.question_text }}</h1> | ||||||
|  |  | ||||||
| @@ -240,7 +240,7 @@ Amend URLconf | |||||||
| First, open the ``polls/urls.py`` URLconf and change it like so: | First, open the ``polls/urls.py`` URLconf and change it like so: | ||||||
|  |  | ||||||
| .. code-block:: python | .. code-block:: python | ||||||
|     :caption: polls/urls.py |     :caption: ``polls/urls.py`` | ||||||
|  |  | ||||||
|     from django.urls import path |     from django.urls import path | ||||||
|  |  | ||||||
| @@ -265,7 +265,7 @@ views and use Django's generic views instead. To do so, open the | |||||||
| ``polls/views.py`` file and change it like so: | ``polls/views.py`` file and change it like so: | ||||||
|  |  | ||||||
| .. code-block:: python | .. code-block:: python | ||||||
|     :caption: polls/views.py |     :caption: ``polls/views.py`` | ||||||
|  |  | ||||||
|     from django.http import HttpResponseRedirect |     from django.http import HttpResponseRedirect | ||||||
|     from django.shortcuts import get_object_or_404, render |     from django.shortcuts import get_object_or_404, render | ||||||
|   | |||||||
| @@ -172,7 +172,7 @@ whose name begins with ``test``. | |||||||
| Put the following in the ``tests.py`` file in the ``polls`` application: | Put the following in the ``tests.py`` file in the ``polls`` application: | ||||||
|  |  | ||||||
| .. code-block:: python | .. code-block:: python | ||||||
|     :caption: polls/tests.py |     :caption: ``polls/tests.py`` | ||||||
|  |  | ||||||
|     import datetime |     import datetime | ||||||
|  |  | ||||||
| @@ -261,7 +261,7 @@ return ``False`` if its ``pub_date`` is in the future. Amend the method in | |||||||
| past: | past: | ||||||
|  |  | ||||||
| .. code-block:: python | .. code-block:: python | ||||||
|     :caption: polls/models.py |     :caption: ``polls/models.py`` | ||||||
|  |  | ||||||
|     def was_published_recently(self): |     def was_published_recently(self): | ||||||
|         now = timezone.now() |         now = timezone.now() | ||||||
| @@ -297,7 +297,7 @@ Add two more test methods to the same class, to test the behavior of the method | |||||||
| more comprehensively: | more comprehensively: | ||||||
|  |  | ||||||
| .. code-block:: python | .. code-block:: python | ||||||
|     :caption: polls/tests.py |     :caption: ``polls/tests.py`` | ||||||
|  |  | ||||||
|     def test_was_published_recently_with_old_question(self): |     def test_was_published_recently_with_old_question(self): | ||||||
|         """ |         """ | ||||||
| @@ -413,7 +413,7 @@ In :doc:`Tutorial 4 </intro/tutorial04>` we introduced a class-based view, | |||||||
| based on :class:`~django.views.generic.list.ListView`: | based on :class:`~django.views.generic.list.ListView`: | ||||||
|  |  | ||||||
| .. code-block:: python | .. code-block:: python | ||||||
|     :caption: polls/views.py |     :caption: ``polls/views.py`` | ||||||
|  |  | ||||||
|     class IndexView(generic.ListView): |     class IndexView(generic.ListView): | ||||||
|         template_name = 'polls/index.html' |         template_name = 'polls/index.html' | ||||||
| @@ -428,14 +428,14 @@ checks the date by comparing it with ``timezone.now()``. First we need to add | |||||||
| an import: | an import: | ||||||
|  |  | ||||||
| .. code-block:: python | .. code-block:: python | ||||||
|     :caption: polls/views.py |     :caption: ``polls/views.py`` | ||||||
|  |  | ||||||
|     from django.utils import timezone |     from django.utils import timezone | ||||||
|  |  | ||||||
| and then we must amend the ``get_queryset`` method like so: | and then we must amend the ``get_queryset`` method like so: | ||||||
|  |  | ||||||
| .. code-block:: python | .. code-block:: python | ||||||
|     :caption: polls/views.py |     :caption: ``polls/views.py`` | ||||||
|  |  | ||||||
|     def get_queryset(self): |     def get_queryset(self): | ||||||
|         """ |         """ | ||||||
| @@ -463,7 +463,7 @@ our :djadmin:`shell` session above. | |||||||
| Add the following to ``polls/tests.py``: | Add the following to ``polls/tests.py``: | ||||||
|  |  | ||||||
| .. code-block:: python | .. code-block:: python | ||||||
|     :caption: polls/tests.py |     :caption: ``polls/tests.py`` | ||||||
|  |  | ||||||
|     from django.urls import reverse |     from django.urls import reverse | ||||||
|  |  | ||||||
| @@ -471,7 +471,7 @@ and we'll create a shortcut function to create questions as well as a new test | |||||||
| class: | class: | ||||||
|  |  | ||||||
| .. code-block:: python | .. code-block:: python | ||||||
|     :caption: polls/tests.py |     :caption: ``polls/tests.py`` | ||||||
|  |  | ||||||
|     def create_question(question_text, days): |     def create_question(question_text, days): | ||||||
|         """ |         """ | ||||||
| @@ -572,7 +572,7 @@ the *index*, users can still reach them if they know or guess the right URL. So | |||||||
| we need to add a similar  constraint to ``DetailView``: | we need to add a similar  constraint to ``DetailView``: | ||||||
|  |  | ||||||
| .. code-block:: python | .. code-block:: python | ||||||
|     :caption: polls/views.py |     :caption: ``polls/views.py`` | ||||||
|  |  | ||||||
|     class DetailView(generic.DetailView): |     class DetailView(generic.DetailView): | ||||||
|         ... |         ... | ||||||
| @@ -587,7 +587,7 @@ is in the past can be displayed, and that one with a ``pub_date`` in the future | |||||||
| is not: | is not: | ||||||
|  |  | ||||||
| .. code-block:: python | .. code-block:: python | ||||||
|     :caption: polls/tests.py |     :caption: ``polls/tests.py`` | ||||||
|  |  | ||||||
|     class QuestionDetailViewTests(TestCase): |     class QuestionDetailViewTests(TestCase): | ||||||
|         def test_future_question(self): |         def test_future_question(self): | ||||||
|   | |||||||
| @@ -61,7 +61,7 @@ the path for templates. | |||||||
| Put the following code in that stylesheet (``polls/static/polls/style.css``): | Put the following code in that stylesheet (``polls/static/polls/style.css``): | ||||||
|  |  | ||||||
| .. code-block:: css | .. code-block:: css | ||||||
|     :caption: polls/static/polls/style.css |     :caption: ``polls/static/polls/style.css`` | ||||||
|  |  | ||||||
|     li a { |     li a { | ||||||
|         color: green; |         color: green; | ||||||
| @@ -70,7 +70,7 @@ Put the following code in that stylesheet (``polls/static/polls/style.css``): | |||||||
| Next, add the following at the top of ``polls/templates/polls/index.html``: | Next, add the following at the top of ``polls/templates/polls/index.html``: | ||||||
|  |  | ||||||
| .. code-block:: html+django | .. code-block:: html+django | ||||||
|     :caption: polls/templates/polls/index.html |     :caption: ``polls/templates/polls/index.html`` | ||||||
|  |  | ||||||
|     {% load static %} |     {% load static %} | ||||||
|  |  | ||||||
| @@ -103,7 +103,7 @@ Then, add a reference to your image in your stylesheet | |||||||
| (``polls/static/polls/style.css``): | (``polls/static/polls/style.css``): | ||||||
|  |  | ||||||
| .. code-block:: css | .. code-block:: css | ||||||
|     :caption: polls/static/polls/style.css |     :caption: ``polls/static/polls/style.css`` | ||||||
|  |  | ||||||
|     body { |     body { | ||||||
|         background: white url("images/background.png") no-repeat; |         background: white url("images/background.png") no-repeat; | ||||||
|   | |||||||
| @@ -24,7 +24,7 @@ Let's see how this works by reordering the fields on the edit form. Replace | |||||||
| the ``admin.site.register(Question)`` line with: | the ``admin.site.register(Question)`` line with: | ||||||
|  |  | ||||||
| .. code-block:: python | .. code-block:: python | ||||||
|     :caption: polls/admin.py |     :caption: ``polls/admin.py`` | ||||||
|  |  | ||||||
|     from django.contrib import admin |     from django.contrib import admin | ||||||
|  |  | ||||||
| @@ -53,7 +53,7 @@ And speaking of forms with dozens of fields, you might want to split the form | |||||||
| up into fieldsets: | up into fieldsets: | ||||||
|  |  | ||||||
| .. code-block:: python | .. code-block:: python | ||||||
|     :caption: polls/admin.py |     :caption: ``polls/admin.py`` | ||||||
|  |  | ||||||
|     from django.contrib import admin |     from django.contrib import admin | ||||||
|  |  | ||||||
| @@ -87,7 +87,7 @@ There are two ways to solve this problem. The first is to register ``Choice`` | |||||||
| with the admin just as we did with ``Question``: | with the admin just as we did with ``Question``: | ||||||
|  |  | ||||||
| .. code-block:: python | .. code-block:: python | ||||||
|     :caption: polls/admin.py |     :caption: ``polls/admin.py`` | ||||||
|  |  | ||||||
|     from django.contrib import admin |     from django.contrib import admin | ||||||
|  |  | ||||||
| @@ -121,7 +121,7 @@ Remove the ``register()`` call for the ``Choice`` model. Then, edit the ``Questi | |||||||
| registration code to read: | registration code to read: | ||||||
|  |  | ||||||
| .. code-block:: python | .. code-block:: python | ||||||
|     :caption: polls/admin.py |     :caption: ``polls/admin.py`` | ||||||
|  |  | ||||||
|     from django.contrib import admin |     from django.contrib import admin | ||||||
|  |  | ||||||
| @@ -168,7 +168,7 @@ tabular way of displaying inline related objects. To use it, change the | |||||||
| ``ChoiceInline`` declaration to read: | ``ChoiceInline`` declaration to read: | ||||||
|  |  | ||||||
| .. code-block:: python | .. code-block:: python | ||||||
|     :caption: polls/admin.py |     :caption: ``polls/admin.py`` | ||||||
|  |  | ||||||
|     class ChoiceInline(admin.TabularInline): |     class ChoiceInline(admin.TabularInline): | ||||||
|         #... |         #... | ||||||
| @@ -200,7 +200,7 @@ tuple of field names to display, as columns, on the change list page for the | |||||||
| object: | object: | ||||||
|  |  | ||||||
| .. code-block:: python | .. code-block:: python | ||||||
|     :caption: polls/admin.py |     :caption: ``polls/admin.py`` | ||||||
|  |  | ||||||
|     class QuestionAdmin(admin.ModelAdmin): |     class QuestionAdmin(admin.ModelAdmin): | ||||||
|         # ... |         # ... | ||||||
| @@ -210,7 +210,7 @@ For good measure, let's also include the ``was_published_recently()`` method | |||||||
| from :doc:`Tutorial 2 </intro/tutorial02>`: | from :doc:`Tutorial 2 </intro/tutorial02>`: | ||||||
|  |  | ||||||
| .. code-block:: python | .. code-block:: python | ||||||
|     :caption: polls/admin.py |     :caption: ``polls/admin.py`` | ||||||
|  |  | ||||||
|     class QuestionAdmin(admin.ModelAdmin): |     class QuestionAdmin(admin.ModelAdmin): | ||||||
|         # ... |         # ... | ||||||
| @@ -232,7 +232,7 @@ You can improve that by using the :func:`~django.contrib.admin.display` | |||||||
| decorator on that method (in :file:`polls/models.py`), as follows: | decorator on that method (in :file:`polls/models.py`), as follows: | ||||||
|  |  | ||||||
| .. code-block:: python | .. code-block:: python | ||||||
|     :caption: polls/models.py |     :caption: ``polls/models.py`` | ||||||
|  |  | ||||||
|     from django.contrib import admin |     from django.contrib import admin | ||||||
|  |  | ||||||
| @@ -310,7 +310,7 @@ Open your settings file (:file:`mysite/settings.py`, remember) and add a | |||||||
| :setting:`DIRS <TEMPLATES-DIRS>` option in the :setting:`TEMPLATES` setting: | :setting:`DIRS <TEMPLATES-DIRS>` option in the :setting:`TEMPLATES` setting: | ||||||
|  |  | ||||||
| .. code-block:: python | .. code-block:: python | ||||||
|     :caption: mysite/settings.py |     :caption: ``mysite/settings.py`` | ||||||
|  |  | ||||||
|     TEMPLATES = [ |     TEMPLATES = [ | ||||||
|         { |         { | ||||||
|   | |||||||
| @@ -2993,7 +2993,7 @@ it instead of with the default site. Finally, update :file:`myproject/urls.py` | |||||||
| to reference your :class:`AdminSite` subclass. | to reference your :class:`AdminSite` subclass. | ||||||
|  |  | ||||||
| .. code-block:: python | .. code-block:: python | ||||||
|     :caption: myapp/admin.py |     :caption: ``myapp/admin.py`` | ||||||
|  |  | ||||||
|     from django.contrib import admin |     from django.contrib import admin | ||||||
|  |  | ||||||
| @@ -3007,7 +3007,7 @@ to reference your :class:`AdminSite` subclass. | |||||||
|  |  | ||||||
|  |  | ||||||
| .. code-block:: python | .. code-block:: python | ||||||
|     :caption: myproject/urls.py |     :caption: ``myproject/urls.py`` | ||||||
|  |  | ||||||
|     from django.urls import path |     from django.urls import path | ||||||
|  |  | ||||||
| @@ -3034,7 +3034,7 @@ to the dotted import path of either a ``AdminSite`` subclass or a callable that | |||||||
| returns a site instance. | returns a site instance. | ||||||
|  |  | ||||||
| .. code-block:: python | .. code-block:: python | ||||||
|     :caption: myproject/admin.py |     :caption: ``myproject/admin.py`` | ||||||
|  |  | ||||||
|     from django.contrib import admin |     from django.contrib import admin | ||||||
|  |  | ||||||
| @@ -3042,7 +3042,7 @@ returns a site instance. | |||||||
|         ... |         ... | ||||||
|  |  | ||||||
| .. code-block:: python | .. code-block:: python | ||||||
|     :caption: myproject/apps.py |     :caption: ``myproject/apps.py`` | ||||||
|  |  | ||||||
|     from django.contrib.admin.apps import AdminConfig |     from django.contrib.admin.apps import AdminConfig | ||||||
|  |  | ||||||
| @@ -3050,7 +3050,7 @@ returns a site instance. | |||||||
|         default_site = 'myproject.admin.MyAdminSite' |         default_site = 'myproject.admin.MyAdminSite' | ||||||
|  |  | ||||||
| .. code-block:: python | .. code-block:: python | ||||||
|     :caption: myproject/settings.py |     :caption: ``myproject/settings.py`` | ||||||
|  |  | ||||||
|     INSTALLED_APPS = [ |     INSTALLED_APPS = [ | ||||||
|         ... |         ... | ||||||
|   | |||||||
| @@ -32,7 +32,7 @@ In your custom ``change_form.html`` template, extend the | |||||||
|     {% endblock %} |     {% endblock %} | ||||||
|  |  | ||||||
| .. code-block:: javascript | .. code-block:: javascript | ||||||
|     :caption: app/static/app/formset_handlers.js |     :caption: ``app/static/app/formset_handlers.js`` | ||||||
|  |  | ||||||
|     document.addEventListener('formset:added', (event) => { |     document.addEventListener('formset:added', (event) => { | ||||||
|         if (event.detail.formsetName == 'author_set') { |         if (event.detail.formsetName == 'author_set') { | ||||||
|   | |||||||
| @@ -131,7 +131,7 @@ password from the `password file`_, you must specify them in the | |||||||
| :setting:`OPTIONS` part of your database configuration in :setting:`DATABASES`: | :setting:`OPTIONS` part of your database configuration in :setting:`DATABASES`: | ||||||
|  |  | ||||||
| .. code-block:: python | .. code-block:: python | ||||||
|     :caption: settings.py |     :caption: ``settings.py`` | ||||||
|  |  | ||||||
|     DATABASES = { |     DATABASES = { | ||||||
|         'default': { |         'default': { | ||||||
| @@ -144,7 +144,7 @@ password from the `password file`_, you must specify them in the | |||||||
|     } |     } | ||||||
|  |  | ||||||
| .. code-block:: text | .. code-block:: text | ||||||
|     :caption: .pg_service.conf |     :caption: ``.pg_service.conf`` | ||||||
|  |  | ||||||
|     [my_service] |     [my_service] | ||||||
|     host=localhost |     host=localhost | ||||||
| @@ -153,7 +153,7 @@ password from the `password file`_, you must specify them in the | |||||||
|     port=5432 |     port=5432 | ||||||
|  |  | ||||||
| .. code-block:: text | .. code-block:: text | ||||||
|     :caption: .my_pgpass |     :caption: ``.my_pgpass`` | ||||||
|  |  | ||||||
|     localhost:5432:NAME:USER:PASSWORD |     localhost:5432:NAME:USER:PASSWORD | ||||||
|  |  | ||||||
| @@ -1086,7 +1086,7 @@ example of subclassing the PostgreSQL engine to change a feature class | |||||||
| ``allows_group_by_selected_pks_on_model``: | ``allows_group_by_selected_pks_on_model``: | ||||||
|  |  | ||||||
| .. code-block:: python | .. code-block:: python | ||||||
|     :caption: mysite/mydbengine/base.py |     :caption: ``mysite/mydbengine/base.py`` | ||||||
|  |  | ||||||
|     from django.db.backends.postgresql import base, features |     from django.db.backends.postgresql import base, features | ||||||
|  |  | ||||||
|   | |||||||
| @@ -331,7 +331,7 @@ The ``Func`` API is as follows: | |||||||
|         customize the SQL as needed. For example: |         customize the SQL as needed. For example: | ||||||
|  |  | ||||||
|         .. code-block:: python |         .. code-block:: python | ||||||
|             :caption: django/db/models/functions.py |             :caption: ``django/db/models/functions.py`` | ||||||
|  |  | ||||||
|             class ConcatPair(Func): |             class ConcatPair(Func): | ||||||
|                 ... |                 ... | ||||||
|   | |||||||
| @@ -1458,7 +1458,7 @@ Relationships defined this way on :ref:`abstract models | |||||||
| concrete model and are not relative to the abstract model's ``app_label``: | concrete model and are not relative to the abstract model's ``app_label``: | ||||||
|  |  | ||||||
| .. code-block:: python | .. code-block:: python | ||||||
|     :caption: products/models.py |     :caption: ``products/models.py`` | ||||||
|  |  | ||||||
|     from django.db import models |     from django.db import models | ||||||
|  |  | ||||||
| @@ -1469,7 +1469,7 @@ concrete model and are not relative to the abstract model's ``app_label``: | |||||||
|             abstract = True |             abstract = True | ||||||
|  |  | ||||||
| .. code-block:: python | .. code-block:: python | ||||||
|     :caption: production/models.py |     :caption: ``production/models.py`` | ||||||
|  |  | ||||||
|     from django.db import models |     from django.db import models | ||||||
|     from products.models import AbstractCar |     from products.models import AbstractCar | ||||||
|   | |||||||
| @@ -564,7 +564,7 @@ current one as well as templates included via the :ttag:`include` tag, | |||||||
| just like all block tags. For example: | just like all block tags. For example: | ||||||
|  |  | ||||||
| .. code-block:: html+django | .. code-block:: html+django | ||||||
|     :caption: base.html |     :caption: ``base.html`` | ||||||
|  |  | ||||||
|     {% autoescape off %} |     {% autoescape off %} | ||||||
|     <h1>{% block title %}{% endblock %}</h1> |     <h1>{% block title %}{% endblock %}</h1> | ||||||
| @@ -573,7 +573,7 @@ just like all block tags. For example: | |||||||
|     {% endautoescape %} |     {% endautoescape %} | ||||||
|  |  | ||||||
| .. code-block:: html+django | .. code-block:: html+django | ||||||
|     :caption: child.html |     :caption: ``child.html`` | ||||||
|  |  | ||||||
|     {% extends "base.html" %} |     {% extends "base.html" %} | ||||||
|     {% block title %}This & that{% endblock %} |     {% block title %}This & that{% endblock %} | ||||||
| @@ -653,14 +653,14 @@ of all comments related to the current task with:: | |||||||
| You can also access methods you've explicitly defined on your own models: | You can also access methods you've explicitly defined on your own models: | ||||||
|  |  | ||||||
| .. code-block:: python | .. code-block:: python | ||||||
|     :caption: models.py |     :caption: ``models.py`` | ||||||
|  |  | ||||||
|     class Task(models.Model): |     class Task(models.Model): | ||||||
|         def foo(self): |         def foo(self): | ||||||
|             return "bar" |             return "bar" | ||||||
|  |  | ||||||
| .. code-block:: html+django | .. code-block:: html+django | ||||||
|     :caption: template.html |     :caption: ``template.html`` | ||||||
|  |  | ||||||
|     {{ task.foo }} |     {{ task.foo }} | ||||||
|  |  | ||||||
|   | |||||||
| @@ -1264,7 +1264,7 @@ attribute (as below). If the ``app_name`` is set in this new way, the | |||||||
| ``app_name``. For example, the URL patterns in the tutorial are changed from: | ``app_name``. For example, the URL patterns in the tutorial are changed from: | ||||||
|  |  | ||||||
| .. code-block:: python | .. code-block:: python | ||||||
|     :caption: mysite/urls.py |     :caption: ``mysite/urls.py`` | ||||||
|  |  | ||||||
|     urlpatterns = [ |     urlpatterns = [ | ||||||
|         url(r'^polls/', include('polls.urls', namespace="polls")), |         url(r'^polls/', include('polls.urls', namespace="polls")), | ||||||
| @@ -1274,7 +1274,7 @@ attribute (as below). If the ``app_name`` is set in this new way, the | |||||||
| to: | to: | ||||||
|  |  | ||||||
| .. code-block:: python | .. code-block:: python | ||||||
|     :caption: mysite/urls.py |     :caption: ``mysite/urls.py`` | ||||||
|  |  | ||||||
|     urlpatterns = [ |     urlpatterns = [ | ||||||
|         url(r'^polls/', include('polls.urls')),  # 'namespace="polls"' removed |         url(r'^polls/', include('polls.urls')),  # 'namespace="polls"' removed | ||||||
| @@ -1282,7 +1282,7 @@ to: | |||||||
|     ] |     ] | ||||||
|  |  | ||||||
| .. code-block:: python | .. code-block:: python | ||||||
|     :caption: polls/urls.py |     :caption: ``polls/urls.py`` | ||||||
|  |  | ||||||
|     app_name = 'polls'  # added |     app_name = 'polls'  # added | ||||||
|     urlpatterns = [...] |     urlpatterns = [...] | ||||||
| @@ -1292,7 +1292,7 @@ is deprecated. Instead, pass ``admin.site.urls`` directly to | |||||||
| ``django.conf.urls.url()``: | ``django.conf.urls.url()``: | ||||||
|  |  | ||||||
| .. code-block:: python | .. code-block:: python | ||||||
|     :caption: urls.py |     :caption: ``urls.py`` | ||||||
|  |  | ||||||
|     from django.conf.urls import url |     from django.conf.urls import url | ||||||
|     from django.contrib import admin |     from django.contrib import admin | ||||||
|   | |||||||
| @@ -347,7 +347,7 @@ modify the pattern to work with any algorithm or with a custom user model. | |||||||
| First, we'll add the custom hasher: | First, we'll add the custom hasher: | ||||||
|  |  | ||||||
| .. code-block:: python | .. code-block:: python | ||||||
|     :caption: accounts/hashers.py |     :caption: ``accounts/hashers.py`` | ||||||
|  |  | ||||||
|     from django.contrib.auth.hashers import ( |     from django.contrib.auth.hashers import ( | ||||||
|         PBKDF2PasswordHasher, SHA1PasswordHasher, |         PBKDF2PasswordHasher, SHA1PasswordHasher, | ||||||
| @@ -367,7 +367,7 @@ First, we'll add the custom hasher: | |||||||
| The data migration might look something like: | The data migration might look something like: | ||||||
|  |  | ||||||
| .. code-block:: python | .. code-block:: python | ||||||
|     :caption: accounts/migrations/0002_migrate_sha1_passwords.py |     :caption: ``accounts/migrations/0002_migrate_sha1_passwords.py`` | ||||||
|  |  | ||||||
|     from django.db import migrations |     from django.db import migrations | ||||||
|  |  | ||||||
| @@ -402,7 +402,7 @@ several thousand users, depending on the speed of your hardware. | |||||||
| Finally, we'll add a :setting:`PASSWORD_HASHERS` setting: | Finally, we'll add a :setting:`PASSWORD_HASHERS` setting: | ||||||
|  |  | ||||||
| .. code-block:: python | .. code-block:: python | ||||||
|     :caption: mysite/settings.py |     :caption: ``mysite/settings.py`` | ||||||
|  |  | ||||||
|     PASSWORD_HASHERS = [ |     PASSWORD_HASHERS = [ | ||||||
|         'django.contrib.auth.hashers.PBKDF2PasswordHasher', |         'django.contrib.auth.hashers.PBKDF2PasswordHasher', | ||||||
|   | |||||||
| @@ -19,7 +19,7 @@ Basic forms | |||||||
| Given a contact form: | Given a contact form: | ||||||
|  |  | ||||||
| .. code-block:: python | .. code-block:: python | ||||||
|     :caption: forms.py |     :caption: ``forms.py`` | ||||||
|  |  | ||||||
|     from django import forms |     from django import forms | ||||||
|  |  | ||||||
| @@ -34,7 +34,7 @@ Given a contact form: | |||||||
| The view can be constructed using a ``FormView``: | The view can be constructed using a ``FormView``: | ||||||
|  |  | ||||||
| .. code-block:: python | .. code-block:: python | ||||||
|     :caption: views.py |     :caption: ``views.py`` | ||||||
|  |  | ||||||
|     from myapp.forms import ContactForm |     from myapp.forms import ContactForm | ||||||
|     from django.views.generic.edit import FormView |     from django.views.generic.edit import FormView | ||||||
| @@ -97,7 +97,7 @@ First we need to add :meth:`~django.db.models.Model.get_absolute_url()` to our | |||||||
| ``Author`` class: | ``Author`` class: | ||||||
|  |  | ||||||
| .. code-block:: python | .. code-block:: python | ||||||
|     :caption: models.py |     :caption: ``models.py`` | ||||||
|  |  | ||||||
|     from django.db import models |     from django.db import models | ||||||
|     from django.urls import reverse |     from django.urls import reverse | ||||||
| @@ -113,7 +113,7 @@ work. Notice how we're just configuring the generic class-based views | |||||||
| here; we don't have to write any logic ourselves: | here; we don't have to write any logic ourselves: | ||||||
|  |  | ||||||
| .. code-block:: python | .. code-block:: python | ||||||
|     :caption: views.py |     :caption: ``views.py`` | ||||||
|  |  | ||||||
|     from django.urls import reverse_lazy |     from django.urls import reverse_lazy | ||||||
|     from django.views.generic.edit import CreateView, DeleteView, UpdateView |     from django.views.generic.edit import CreateView, DeleteView, UpdateView | ||||||
| @@ -147,7 +147,7 @@ and :attr:`~django.views.generic.edit.FormMixin.form_class` attributes, an | |||||||
| Finally, we hook these new views into the URLconf: | Finally, we hook these new views into the URLconf: | ||||||
|  |  | ||||||
| .. code-block:: python | .. code-block:: python | ||||||
|     :caption: urls.py |     :caption: ``urls.py`` | ||||||
|  |  | ||||||
|     from django.urls import path |     from django.urls import path | ||||||
|     from myapp.views import AuthorCreateView, AuthorDeleteView, AuthorUpdateView |     from myapp.views import AuthorCreateView, AuthorDeleteView, AuthorUpdateView | ||||||
| @@ -188,7 +188,7 @@ you can use a custom :class:`~django.forms.ModelForm` to do this. First, add | |||||||
| the foreign key relation to the model: | the foreign key relation to the model: | ||||||
|  |  | ||||||
| .. code-block:: python | .. code-block:: python | ||||||
|     :caption: models.py |     :caption: ``models.py`` | ||||||
|  |  | ||||||
|     from django.contrib.auth.models import User |     from django.contrib.auth.models import User | ||||||
|     from django.db import models |     from django.db import models | ||||||
| @@ -204,7 +204,7 @@ to edit, and override | |||||||
| :meth:`~django.views.generic.edit.ModelFormMixin.form_valid()` to add the user: | :meth:`~django.views.generic.edit.ModelFormMixin.form_valid()` to add the user: | ||||||
|  |  | ||||||
| .. code-block:: python | .. code-block:: python | ||||||
|     :caption: views.py |     :caption: ``views.py`` | ||||||
|  |  | ||||||
|     from django.contrib.auth.mixins import LoginRequiredMixin |     from django.contrib.auth.mixins import LoginRequiredMixin | ||||||
|     from django.views.generic.edit import CreateView |     from django.views.generic.edit import CreateView | ||||||
|   | |||||||
| @@ -221,7 +221,7 @@ We'll demonstrate this with the ``Author`` model we used in the | |||||||
| :doc:`generic class-based views introduction<generic-display>`. | :doc:`generic class-based views introduction<generic-display>`. | ||||||
|  |  | ||||||
| .. code-block:: python | .. code-block:: python | ||||||
|     :caption: views.py |     :caption: ``views.py`` | ||||||
|  |  | ||||||
|     from django.http import HttpResponseForbidden, HttpResponseRedirect |     from django.http import HttpResponseForbidden, HttpResponseRedirect | ||||||
|     from django.urls import reverse |     from django.urls import reverse | ||||||
| @@ -253,7 +253,7 @@ look up the author we're interested in, which it does with a call to | |||||||
| We can hook this into our URLs easily enough: | We can hook this into our URLs easily enough: | ||||||
|  |  | ||||||
| .. code-block:: python | .. code-block:: python | ||||||
|     :caption: urls.py |     :caption: ``urls.py`` | ||||||
|  |  | ||||||
|     from django.urls import path |     from django.urls import path | ||||||
|     from books.views import RecordInterestView |     from books.views import RecordInterestView | ||||||
|   | |||||||
| @@ -1474,7 +1474,7 @@ For example, if you had ``organic.py`` and ``synthetic.py`` in the ``models`` | |||||||
| directory: | directory: | ||||||
|  |  | ||||||
| .. code-block:: python | .. code-block:: python | ||||||
|     :caption: myapp/models/__init__.py |     :caption: ``myapp/models/__init__.py`` | ||||||
|  |  | ||||||
|     from .organic import Person |     from .organic import Person | ||||||
|     from .synthetic import Robot |     from .synthetic import Robot | ||||||
|   | |||||||
| @@ -227,7 +227,7 @@ We already know what we want our HTML form to look like. Our starting point for | |||||||
| it in Django is this: | it in Django is this: | ||||||
|  |  | ||||||
| .. code-block:: python | .. code-block:: python | ||||||
|     :caption: forms.py |     :caption: ``forms.py`` | ||||||
|  |  | ||||||
|     from django import forms |     from django import forms | ||||||
|  |  | ||||||
| @@ -277,7 +277,7 @@ To handle the form we need to instantiate it in the view for the URL where we | |||||||
| want it to be published: | want it to be published: | ||||||
|  |  | ||||||
| .. code-block:: python | .. code-block:: python | ||||||
|     :caption: views.py |     :caption: ``views.py`` | ||||||
|  |  | ||||||
|     from django.http import HttpResponseRedirect |     from django.http import HttpResponseRedirect | ||||||
|     from django.shortcuts import render |     from django.shortcuts import render | ||||||
| @@ -404,7 +404,7 @@ Consider a more useful form than our minimal example above, which we could use | |||||||
| to implement "contact me" functionality on a personal website: | to implement "contact me" functionality on a personal website: | ||||||
|  |  | ||||||
| .. code-block:: python | .. code-block:: python | ||||||
|     :caption: forms.py |     :caption: ``forms.py`` | ||||||
|  |  | ||||||
|     from django import forms |     from django import forms | ||||||
|  |  | ||||||
| @@ -453,7 +453,7 @@ values to a Python ``int`` and ``float`` respectively. | |||||||
| Here's how the form data could be processed in the view that handles this form: | Here's how the form data could be processed in the view that handles this form: | ||||||
|  |  | ||||||
| .. code-block:: python | .. code-block:: python | ||||||
|     :caption: views.py |     :caption: ``views.py`` | ||||||
|  |  | ||||||
|     from django.core.mail import send_mail |     from django.core.mail import send_mail | ||||||
|  |  | ||||||
| @@ -526,7 +526,7 @@ In your templates: | |||||||
| Then you can configure the :setting:`FORM_RENDERER` setting: | Then you can configure the :setting:`FORM_RENDERER` setting: | ||||||
|  |  | ||||||
| .. code-block:: python | .. code-block:: python | ||||||
|     :caption: settings.py |     :caption: ``settings.py`` | ||||||
|  |  | ||||||
|     from django.forms.renderers import TemplatesSetting |     from django.forms.renderers import TemplatesSetting | ||||||
|  |  | ||||||
|   | |||||||
| @@ -22,7 +22,7 @@ Basic file uploads | |||||||
| Consider a form containing a :class:`~django.forms.FileField`: | Consider a form containing a :class:`~django.forms.FileField`: | ||||||
|  |  | ||||||
| .. code-block:: python | .. code-block:: python | ||||||
|     :caption: forms.py |     :caption: ``forms.py`` | ||||||
|  |  | ||||||
|     from django import forms |     from django import forms | ||||||
|  |  | ||||||
| @@ -46,7 +46,7 @@ Most of the time, you'll pass the file data from ``request`` into the form as | |||||||
| described in :ref:`binding-uploaded-files`. This would look something like: | described in :ref:`binding-uploaded-files`. This would look something like: | ||||||
|  |  | ||||||
| .. code-block:: python | .. code-block:: python | ||||||
|     :caption: views.py |     :caption: ``views.py`` | ||||||
|  |  | ||||||
|     from django.http import HttpResponseRedirect |     from django.http import HttpResponseRedirect | ||||||
|     from django.shortcuts import render |     from django.shortcuts import render | ||||||
| @@ -146,7 +146,7 @@ If you want to upload multiple files using one form field, set the ``multiple`` | |||||||
| HTML attribute of field's widget: | HTML attribute of field's widget: | ||||||
|  |  | ||||||
| .. code-block:: python | .. code-block:: python | ||||||
|     :caption: forms.py |     :caption: ``forms.py`` | ||||||
|  |  | ||||||
|     from django import forms |     from django import forms | ||||||
|  |  | ||||||
| @@ -158,7 +158,7 @@ Then override the ``post`` method of your | |||||||
| uploads: | uploads: | ||||||
|  |  | ||||||
| .. code-block:: python | .. code-block:: python | ||||||
|     :caption: views.py |     :caption: ``views.py`` | ||||||
|  |  | ||||||
|     from django.views.generic.edit import FormView |     from django.views.generic.edit import FormView | ||||||
|     from .forms import FileFieldForm |     from .forms import FileFieldForm | ||||||
|   | |||||||
| @@ -767,7 +767,7 @@ so that it takes the instance namespace into consideration when creating and | |||||||
| displaying polls. | displaying polls. | ||||||
|  |  | ||||||
| .. code-block:: python | .. code-block:: python | ||||||
|     :caption: urls.py |     :caption: ``urls.py`` | ||||||
|  |  | ||||||
|     from django.urls import include, path |     from django.urls import include, path | ||||||
|  |  | ||||||
| @@ -777,7 +777,7 @@ displaying polls. | |||||||
|     ] |     ] | ||||||
|  |  | ||||||
| .. code-block:: python | .. code-block:: python | ||||||
|     :caption: polls/urls.py |     :caption: ``polls/urls.py`` | ||||||
|  |  | ||||||
|     from django.urls import path |     from django.urls import path | ||||||
|  |  | ||||||
| @@ -836,7 +836,7 @@ module, or a string reference to the module, to :func:`~django.urls.include`, | |||||||
| not the list of ``urlpatterns`` itself. | not the list of ``urlpatterns`` itself. | ||||||
|  |  | ||||||
| .. code-block:: python | .. code-block:: python | ||||||
|     :caption: polls/urls.py |     :caption: ``polls/urls.py`` | ||||||
|  |  | ||||||
|     from django.urls import path |     from django.urls import path | ||||||
|  |  | ||||||
| @@ -850,7 +850,7 @@ not the list of ``urlpatterns`` itself. | |||||||
|     ] |     ] | ||||||
|  |  | ||||||
| .. code-block:: python | .. code-block:: python | ||||||
|     :caption: urls.py |     :caption: ``urls.py`` | ||||||
|  |  | ||||||
|     from django.urls import include, path |     from django.urls import include, path | ||||||
|  |  | ||||||
|   | |||||||
| @@ -207,7 +207,7 @@ To begin, here's a small configuration that will allow you to output all log | |||||||
| messages to the console: | messages to the console: | ||||||
|  |  | ||||||
| .. code-block:: python | .. code-block:: python | ||||||
|     :caption: settings.py |     :caption: ``settings.py`` | ||||||
|  |  | ||||||
|     import os |     import os | ||||||
|  |  | ||||||
| @@ -235,7 +235,7 @@ logging system print more messages from just the :ref:`django-logger` named | |||||||
| logger: | logger: | ||||||
|  |  | ||||||
| .. code-block:: python | .. code-block:: python | ||||||
|     :caption: settings.py |     :caption: ``settings.py`` | ||||||
|  |  | ||||||
|     import os |     import os | ||||||
|  |  | ||||||
| @@ -272,7 +272,7 @@ You don't have to log to the console. Here's a configuration which writes all | |||||||
| logging from the :ref:`django-logger` named logger to a local file: | logging from the :ref:`django-logger` named logger to a local file: | ||||||
|  |  | ||||||
| .. code-block:: python | .. code-block:: python | ||||||
|     :caption: settings.py |     :caption: ``settings.py`` | ||||||
|  |  | ||||||
|     LOGGING = { |     LOGGING = { | ||||||
|         'version': 1, |         'version': 1, | ||||||
| @@ -299,7 +299,7 @@ location that's writable by the user that's running the Django application. | |||||||
| Finally, here's an example of a fairly complex logging setup: | Finally, here's an example of a fairly complex logging setup: | ||||||
|  |  | ||||||
| .. code-block:: python | .. code-block:: python | ||||||
|     :caption: settings.py |     :caption: ``settings.py`` | ||||||
|  |  | ||||||
|     LOGGING = { |     LOGGING = { | ||||||
|         'version': 1, |         'version': 1, | ||||||
| @@ -444,7 +444,7 @@ Here's an example that disables Django's logging configuration and then | |||||||
| manually configures logging: | manually configures logging: | ||||||
|  |  | ||||||
| .. code-block:: python | .. code-block:: python | ||||||
|     :caption: settings.py |     :caption: ``settings.py`` | ||||||
|  |  | ||||||
|     LOGGING_CONFIG = None |     LOGGING_CONFIG = None | ||||||
|  |  | ||||||
|   | |||||||
| @@ -88,7 +88,7 @@ must ensure that they are configured correctly, by calling | |||||||
| For example, assuming the following class-based view: | For example, assuming the following class-based view: | ||||||
|  |  | ||||||
| .. code-block:: python | .. code-block:: python | ||||||
|     :caption: views.py |     :caption: ``views.py`` | ||||||
|  |  | ||||||
|     from django.views.generic import TemplateView |     from django.views.generic import TemplateView | ||||||
|  |  | ||||||
| @@ -105,7 +105,7 @@ the view, then passing a ``request`` to ``setup()``, before proceeding with | |||||||
| your test's code: | your test's code: | ||||||
|  |  | ||||||
| .. code-block:: python | .. code-block:: python | ||||||
|     :caption: tests.py |     :caption: ``tests.py`` | ||||||
|  |  | ||||||
|     from django.test import RequestFactory, TestCase |     from django.test import RequestFactory, TestCase | ||||||
|     from .views import HomeView |     from .views import HomeView | ||||||
| @@ -412,7 +412,7 @@ following structure:: | |||||||
| Let's take a look inside a couple of those files: | Let's take a look inside a couple of those files: | ||||||
|  |  | ||||||
| .. code-block:: python | .. code-block:: python | ||||||
|     :caption: runtests.py |     :caption: ``runtests.py`` | ||||||
|  |  | ||||||
|     #!/usr/bin/env python |     #!/usr/bin/env python | ||||||
|     import os |     import os | ||||||
| @@ -440,7 +440,7 @@ command-line options for controlling verbosity, passing in specific test | |||||||
| labels to run, etc. | labels to run, etc. | ||||||
|  |  | ||||||
| .. code-block:: python | .. code-block:: python | ||||||
|     :caption: tests/test_settings.py |     :caption: ``tests/test_settings.py`` | ||||||
|  |  | ||||||
|     SECRET_KEY = 'fake-key' |     SECRET_KEY = 'fake-key' | ||||||
|     INSTALLED_APPS = [ |     INSTALLED_APPS = [ | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user