mirror of
https://github.com/django/django.git
synced 2025-11-20 03:30:00 +00:00
Merged master changes.
This commit is contained in:
commit
7e82e83d67
146 changed files with 2278 additions and 875 deletions
556
docs/ref/class-based-views/flattened-index.txt
Normal file
556
docs/ref/class-based-views/flattened-index.txt
Normal file
|
|
@ -0,0 +1,556 @@
|
|||
===========================================
|
||||
Class-based generic views - flattened index
|
||||
===========================================
|
||||
|
||||
This index provides an alternate organization of the reference documentation
|
||||
for class-based views. For each view, the effective attributes and methods from
|
||||
the class tree are represented under that view. For the reference
|
||||
documentation organized by the class which defines the behavior, see
|
||||
:doc:`Class-based views</ref/class-based-views/index>`
|
||||
|
||||
Simple generic views
|
||||
--------------------
|
||||
|
||||
View
|
||||
~~~~
|
||||
.. class:: View()
|
||||
|
||||
**Attributes** (with optional accessor):
|
||||
|
||||
* :attr:`~django.views.generic.base.View.http_method_names`
|
||||
|
||||
**Methods**
|
||||
|
||||
* :meth:`~django.views.generic.base.View.as_view`
|
||||
* :meth:`~django.views.generic.base.View.dispatch`
|
||||
* :meth:`~django.views.generic.base.View.head`
|
||||
* :meth:`~django.views.generic.base.View.http_method_not_allowed`
|
||||
|
||||
TemplateView
|
||||
~~~~~~~~~~~~
|
||||
.. class:: TemplateView()
|
||||
|
||||
**Attributes** (with optional accessor):
|
||||
|
||||
* :attr:`~django.views.generic.base.View.http_method_names`
|
||||
* :attr:`~django.views.generic.base.TemplateResponseMixin.response_class`
|
||||
* :attr:`~django.views.generic.base.TemplateResponseMixin.template_name` [:meth:`~django.views.generic.base.TemplateResponseMixin.get_template_names`]
|
||||
|
||||
**Methods**
|
||||
|
||||
* :meth:`~django.views.generic.base.View.as_view`
|
||||
* :meth:`~django.views.generic.base.View.dispatch`
|
||||
* :meth:`~django.views.generic.base.TemplateView.get`
|
||||
* :meth:`~django.views.generic.base.TemplateView.get_context_data`
|
||||
* :meth:`~django.views.generic.base.View.head`
|
||||
* :meth:`~django.views.generic.base.View.http_method_not_allowed`
|
||||
* :meth:`~django.views.generic.base.TemplateResponseMixin.render_to_response`
|
||||
|
||||
RedirectView
|
||||
~~~~~~~~~~~~
|
||||
.. class:: RedirectView()
|
||||
|
||||
**Attributes** (with optional accessor):
|
||||
|
||||
* :attr:`~django.views.generic.base.View.http_method_names`
|
||||
* :attr:`~django.views.generic.base.RedirectView.permanent`
|
||||
* :attr:`~django.views.generic.base.RedirectView.query_string`
|
||||
* :attr:`~django.views.generic.base.RedirectView.url`
|
||||
|
||||
**Methods**
|
||||
|
||||
* :meth:`~django.views.generic.base.View.as_view`
|
||||
* :meth:`~django.views.generic.base.RedirectView.delete`
|
||||
* :meth:`~django.views.generic.base.View.dispatch`
|
||||
* :meth:`~django.views.generic.base.RedirectView.get`
|
||||
* :meth:`~django.views.generic.base.RedirectView.get_redirect_url`
|
||||
* :meth:`~django.views.generic.base.View.head`
|
||||
* :meth:`~django.views.generic.base.View.http_method_not_allowed`
|
||||
* :meth:`~django.views.generic.base.RedirectView.options`
|
||||
* :meth:`~django.views.generic.base.RedirectView.post`
|
||||
* :meth:`~django.views.generic.base.RedirectView.put`
|
||||
|
||||
Detail Views
|
||||
------------
|
||||
|
||||
DetailView
|
||||
~~~~~~~~~~
|
||||
.. class:: DetailView()
|
||||
|
||||
**Attributes** (with optional accessor):
|
||||
|
||||
* :attr:`~django.views.generic.detail.SingleObjectMixin.context_object_name` [:meth:`~django.views.generic.detail.SingleObjectMixin.get_context_object_name`]
|
||||
* :attr:`~django.views.generic.base.View.http_method_names`
|
||||
* :attr:`~django.views.generic.detail.SingleObjectMixin.model`
|
||||
* :attr:`~django.views.generic.detail.SingleObjectMixin.pk_url_kwarg`
|
||||
* :attr:`~django.views.generic.detail.SingleObjectMixin.queryset` [:meth:`~django.views.generic.detail.SingleObjectMixin.get_queryset`]
|
||||
* :attr:`~django.views.generic.base.TemplateResponseMixin.response_class`
|
||||
* :attr:`~django.views.generic.detail.SingleObjectMixin.slug_field` [:meth:`~django.views.generic.detail.SingleObjectMixin.get_slug_field`]
|
||||
* :attr:`~django.views.generic.detail.SingleObjectMixin.slug_url_kwarg`
|
||||
* :attr:`~django.views.generic.base.TemplateResponseMixin.template_name` [:meth:`~django.views.generic.base.TemplateResponseMixin.get_template_names`]
|
||||
* :attr:`~django.views.generic.detail.SingleObjectTemplateResponseMixin.template_name_field`
|
||||
* :attr:`~django.views.generic.detail.SingleObjectTemplateResponseMixin.template_name_suffix`
|
||||
|
||||
**Methods**
|
||||
|
||||
* :meth:`~django.views.generic.base.View.as_view`
|
||||
* :meth:`~django.views.generic.base.View.dispatch`
|
||||
* :meth:`~django.views.generic.detail.BaseDetailView.get`
|
||||
* :meth:`~django.views.generic.detail.SingleObjectMixin.get_context_data`
|
||||
* :meth:`~django.views.generic.detail.SingleObjectMixin.get_object`
|
||||
* :meth:`~django.views.generic.base.View.head`
|
||||
* :meth:`~django.views.generic.base.View.http_method_not_allowed`
|
||||
* :meth:`~django.views.generic.base.TemplateResponseMixin.render_to_response`
|
||||
|
||||
List Views
|
||||
----------
|
||||
|
||||
ListView
|
||||
~~~~~~~~
|
||||
.. class:: ListView()
|
||||
|
||||
**Attributes** (with optional accessor):
|
||||
|
||||
* :attr:`~django.views.generic.list.MultipleObjectMixin.allow_empty` [:meth:`~django.views.generic.list.MultipleObjectMixin.get_allow_empty`]
|
||||
* :attr:`~django.views.generic.list.MultipleObjectMixin.context_object_name` [:meth:`~django.views.generic.list.MultipleObjectMixin.get_context_object_name`]
|
||||
* :attr:`~django.views.generic.base.View.http_method_names`
|
||||
* :attr:`~django.views.generic.list.MultipleObjectMixin.model`
|
||||
* :attr:`~django.views.generic.list.MultipleObjectMixin.paginate_by` [:meth:`~django.views.generic.list.MultipleObjectMixin.get_paginate_by`]
|
||||
* :attr:`~django.views.generic.list.MultipleObjectMixin.paginator_class`
|
||||
* :attr:`~django.views.generic.list.MultipleObjectMixin.queryset` [:meth:`~django.views.generic.list.MultipleObjectMixin.get_queryset`]
|
||||
* :attr:`~django.views.generic.base.TemplateResponseMixin.response_class`
|
||||
* :attr:`~django.views.generic.base.TemplateResponseMixin.template_name` [:meth:`~django.views.generic.base.TemplateResponseMixin.get_template_names`]
|
||||
* :attr:`~django.views.generic.list.MultipleObjectTemplateResponseMixin.template_name_suffix`
|
||||
|
||||
**Methods**
|
||||
|
||||
* :meth:`~django.views.generic.base.View.as_view`
|
||||
* :meth:`~django.views.generic.base.View.dispatch`
|
||||
* :meth:`~django.views.generic.list.BaseListView.get`
|
||||
* :meth:`~django.views.generic.list.MultipleObjectMixin.get_context_data`
|
||||
* :meth:`~django.views.generic.list.MultipleObjectMixin.get_paginator`
|
||||
* :meth:`~django.views.generic.base.View.head`
|
||||
* :meth:`~django.views.generic.base.View.http_method_not_allowed`
|
||||
* :meth:`~django.views.generic.list.MultipleObjectMixin.paginate_queryset`
|
||||
* :meth:`~django.views.generic.base.TemplateResponseMixin.render_to_response`
|
||||
|
||||
Editing views
|
||||
-------------
|
||||
|
||||
FormView
|
||||
~~~~~~~~
|
||||
.. class:: FormView()
|
||||
|
||||
**Attributes** (with optional accessor):
|
||||
|
||||
* :attr:`~django.views.generic.edit.FormMixin.form_class` [:meth:`~django.views.generic.edit.FormMixin.get_form_class`]
|
||||
* :attr:`~django.views.generic.base.View.http_method_names`
|
||||
* :attr:`~django.views.generic.edit.FormMixin.initial` [:meth:`~django.views.generic.edit.FormMixin.get_initial`]
|
||||
* :attr:`~django.views.generic.base.TemplateResponseMixin.response_class`
|
||||
* :attr:`~django.views.generic.edit.FormMixin.success_url` [:meth:`~django.views.generic.edit.FormMixin.get_success_url`]
|
||||
* :attr:`~django.views.generic.base.TemplateResponseMixin.template_name` [:meth:`~django.views.generic.base.TemplateResponseMixin.get_template_names`]
|
||||
|
||||
**Methods**
|
||||
|
||||
* :meth:`~django.views.generic.base.View.as_view`
|
||||
* :meth:`~django.views.generic.base.View.dispatch`
|
||||
* :meth:`~django.views.generic.edit.FormMixin.form_invalid`
|
||||
* :meth:`~django.views.generic.edit.FormMixin.form_valid`
|
||||
* :meth:`~django.views.generic.edit.ProcessFormView.get`
|
||||
* :meth:`~django.views.generic.edit.FormMixin.get_context_data`
|
||||
* :meth:`~django.views.generic.edit.FormMixin.get_form`
|
||||
* :meth:`~django.views.generic.edit.FormMixin.get_form_kwargs`
|
||||
* :meth:`~django.views.generic.base.View.head`
|
||||
* :meth:`~django.views.generic.base.View.http_method_not_allowed`
|
||||
* :meth:`~django.views.generic.edit.ProcessFormView.post`
|
||||
* :meth:`~django.views.generic.edit.ProcessFormView.put`
|
||||
* :meth:`~django.views.generic.base.TemplateResponseMixin.render_to_response`
|
||||
|
||||
CreateView
|
||||
~~~~~~~~~~
|
||||
.. class:: CreateView()
|
||||
|
||||
**Attributes** (with optional accessor):
|
||||
|
||||
* :attr:`~django.views.generic.detail.SingleObjectMixin.context_object_name` [:meth:`~django.views.generic.detail.SingleObjectMixin.get_context_object_name`]
|
||||
* :attr:`~django.views.generic.edit.FormMixin.form_class` [:meth:`~django.views.generic.edit.FormMixin.get_form_class`]
|
||||
* :attr:`~django.views.generic.base.View.http_method_names`
|
||||
* :attr:`~django.views.generic.edit.FormMixin.initial` [:meth:`~django.views.generic.edit.FormMixin.get_initial`]
|
||||
* :attr:`~django.views.generic.detail.SingleObjectMixin.model`
|
||||
* :attr:`~django.views.generic.detail.SingleObjectMixin.pk_url_kwarg`
|
||||
* :attr:`~django.views.generic.detail.SingleObjectMixin.queryset` [:meth:`~django.views.generic.detail.SingleObjectMixin.get_queryset`]
|
||||
* :attr:`~django.views.generic.base.TemplateResponseMixin.response_class`
|
||||
* :attr:`~django.views.generic.detail.SingleObjectMixin.slug_field` [:meth:`~django.views.generic.detail.SingleObjectMixin.get_slug_field`]
|
||||
* :attr:`~django.views.generic.detail.SingleObjectMixin.slug_url_kwarg`
|
||||
* :attr:`~django.views.generic.edit.FormMixin.success_url` [:meth:`~django.views.generic.edit.FormMixin.get_success_url`]
|
||||
* :attr:`~django.views.generic.base.TemplateResponseMixin.template_name` [:meth:`~django.views.generic.base.TemplateResponseMixin.get_template_names`]
|
||||
* :attr:`~django.views.generic.detail.SingleObjectTemplateResponseMixin.template_name_field`
|
||||
* :attr:`~django.views.generic.detail.SingleObjectTemplateResponseMixin.template_name_suffix`
|
||||
|
||||
**Methods**
|
||||
|
||||
* :meth:`~django.views.generic.base.View.as_view`
|
||||
* :meth:`~django.views.generic.base.View.dispatch`
|
||||
* :meth:`~django.views.generic.edit.FormMixin.form_invalid`
|
||||
* :meth:`~django.views.generic.edit.FormMixin.form_valid`
|
||||
* :meth:`~django.views.generic.edit.ProcessFormView.get`
|
||||
* :meth:`~django.views.generic.edit.FormMixin.get_context_data`
|
||||
* :meth:`~django.views.generic.edit.FormMixin.get_form`
|
||||
* :meth:`~django.views.generic.edit.FormMixin.get_form_kwargs`
|
||||
* :meth:`~django.views.generic.detail.SingleObjectMixin.get_object`
|
||||
* :meth:`~django.views.generic.base.View.head`
|
||||
* :meth:`~django.views.generic.base.View.http_method_not_allowed`
|
||||
* :meth:`~django.views.generic.edit.ProcessFormView.post`
|
||||
* :meth:`~django.views.generic.edit.ProcessFormView.put`
|
||||
* :meth:`~django.views.generic.base.TemplateResponseMixin.render_to_response`
|
||||
|
||||
UpdateView
|
||||
~~~~~~~~~~
|
||||
.. class:: UpdateView()
|
||||
|
||||
**Attributes** (with optional accessor):
|
||||
|
||||
* :attr:`~django.views.generic.detail.SingleObjectMixin.context_object_name` [:meth:`~django.views.generic.detail.SingleObjectMixin.get_context_object_name`]
|
||||
* :attr:`~django.views.generic.edit.FormMixin.form_class` [:meth:`~django.views.generic.edit.FormMixin.get_form_class`]
|
||||
* :attr:`~django.views.generic.base.View.http_method_names`
|
||||
* :attr:`~django.views.generic.edit.FormMixin.initial` [:meth:`~django.views.generic.edit.FormMixin.get_initial`]
|
||||
* :attr:`~django.views.generic.detail.SingleObjectMixin.model`
|
||||
* :attr:`~django.views.generic.detail.SingleObjectMixin.pk_url_kwarg`
|
||||
* :attr:`~django.views.generic.detail.SingleObjectMixin.queryset` [:meth:`~django.views.generic.detail.SingleObjectMixin.get_queryset`]
|
||||
* :attr:`~django.views.generic.base.TemplateResponseMixin.response_class`
|
||||
* :attr:`~django.views.generic.detail.SingleObjectMixin.slug_field` [:meth:`~django.views.generic.detail.SingleObjectMixin.get_slug_field`]
|
||||
* :attr:`~django.views.generic.detail.SingleObjectMixin.slug_url_kwarg`
|
||||
* :attr:`~django.views.generic.edit.FormMixin.success_url` [:meth:`~django.views.generic.edit.FormMixin.get_success_url`]
|
||||
* :attr:`~django.views.generic.base.TemplateResponseMixin.template_name` [:meth:`~django.views.generic.base.TemplateResponseMixin.get_template_names`]
|
||||
* :attr:`~django.views.generic.detail.SingleObjectTemplateResponseMixin.template_name_field`
|
||||
* :attr:`~django.views.generic.detail.SingleObjectTemplateResponseMixin.template_name_suffix`
|
||||
|
||||
**Methods**
|
||||
|
||||
* :meth:`~django.views.generic.base.View.as_view`
|
||||
* :meth:`~django.views.generic.base.View.dispatch`
|
||||
* :meth:`~django.views.generic.edit.FormMixin.form_invalid`
|
||||
* :meth:`~django.views.generic.edit.FormMixin.form_valid`
|
||||
* :meth:`~django.views.generic.edit.ProcessFormView.get`
|
||||
* :meth:`~django.views.generic.edit.FormMixin.get_context_data`
|
||||
* :meth:`~django.views.generic.edit.FormMixin.get_form`
|
||||
* :meth:`~django.views.generic.edit.FormMixin.get_form_kwargs`
|
||||
* :meth:`~django.views.generic.detail.SingleObjectMixin.get_object`
|
||||
* :meth:`~django.views.generic.base.View.head`
|
||||
* :meth:`~django.views.generic.base.View.http_method_not_allowed`
|
||||
* :meth:`~django.views.generic.edit.ProcessFormView.post`
|
||||
* :meth:`~django.views.generic.edit.ProcessFormView.put`
|
||||
* :meth:`~django.views.generic.base.TemplateResponseMixin.render_to_response`
|
||||
|
||||
DeleteView
|
||||
~~~~~~~~~~
|
||||
.. class:: DeleteView()
|
||||
|
||||
**Attributes** (with optional accessor):
|
||||
|
||||
* :attr:`~django.views.generic.detail.SingleObjectMixin.context_object_name` [:meth:`~django.views.generic.detail.SingleObjectMixin.get_context_object_name`]
|
||||
* :attr:`~django.views.generic.base.View.http_method_names`
|
||||
* :attr:`~django.views.generic.detail.SingleObjectMixin.model`
|
||||
* :attr:`~django.views.generic.detail.SingleObjectMixin.pk_url_kwarg`
|
||||
* :attr:`~django.views.generic.detail.SingleObjectMixin.queryset` [:meth:`~django.views.generic.detail.SingleObjectMixin.get_queryset`]
|
||||
* :attr:`~django.views.generic.base.TemplateResponseMixin.response_class`
|
||||
* :attr:`~django.views.generic.detail.SingleObjectMixin.slug_field` [:meth:`~django.views.generic.detail.SingleObjectMixin.get_slug_field`]
|
||||
* :attr:`~django.views.generic.detail.SingleObjectMixin.slug_url_kwarg`
|
||||
* :attr:`~django.views.generic.edit.DeletionMixin.success_url` [:meth:`~django.views.generic.edit.DeletionMixin.get_success_url`]
|
||||
* :attr:`~django.views.generic.base.TemplateResponseMixin.template_name` [:meth:`~django.views.generic.base.TemplateResponseMixin.get_template_names`]
|
||||
* :attr:`~django.views.generic.detail.SingleObjectTemplateResponseMixin.template_name_field`
|
||||
* :attr:`~django.views.generic.detail.SingleObjectTemplateResponseMixin.template_name_suffix`
|
||||
|
||||
**Methods**
|
||||
|
||||
* :meth:`~django.views.generic.base.View.as_view`
|
||||
* :meth:`~django.views.generic.edit.DeletionMixin.delete`
|
||||
* :meth:`~django.views.generic.base.View.dispatch`
|
||||
* :meth:`~django.views.generic.detail.BaseDetailView.get`
|
||||
* :meth:`~django.views.generic.detail.SingleObjectMixin.get_context_data`
|
||||
* :meth:`~django.views.generic.detail.SingleObjectMixin.get_object`
|
||||
* :meth:`~django.views.generic.base.View.head`
|
||||
* :meth:`~django.views.generic.base.View.http_method_not_allowed`
|
||||
* :meth:`~django.views.generic.edit.DeletionMixin.post`
|
||||
* :meth:`~django.views.generic.base.TemplateResponseMixin.render_to_response`
|
||||
|
||||
Date-based views
|
||||
----------------
|
||||
|
||||
ArchiveIndexView
|
||||
~~~~~~~~~~~~~~~~
|
||||
.. class:: ArchiveIndexView()
|
||||
|
||||
**Attributes** (with optional accessor):
|
||||
|
||||
* :attr:`~django.views.generic.list.MultipleObjectMixin.allow_empty` [:meth:`~django.views.generic.list.MultipleObjectMixin.get_allow_empty`]
|
||||
* :attr:`~django.views.generic.dates.DateMixin.allow_future` [:meth:`~django.views.generic.dates.DateMixin.get_allow_future`]
|
||||
* :attr:`~django.views.generic.list.MultipleObjectMixin.context_object_name` [:meth:`~django.views.generic.list.MultipleObjectMixin.get_context_object_name`]
|
||||
* :attr:`~django.views.generic.dates.DateMixin.date_field` [:meth:`~django.views.generic.dates.DateMixin.get_date_field`]
|
||||
* :attr:`~django.views.generic.base.View.http_method_names`
|
||||
* :attr:`~django.views.generic.list.MultipleObjectMixin.model`
|
||||
* :attr:`~django.views.generic.list.MultipleObjectMixin.paginate_by` [:meth:`~django.views.generic.list.MultipleObjectMixin.get_paginate_by`]
|
||||
* :attr:`~django.views.generic.list.MultipleObjectMixin.paginator_class`
|
||||
* :attr:`~django.views.generic.list.MultipleObjectMixin.queryset` [:meth:`~django.views.generic.list.MultipleObjectMixin.get_queryset`]
|
||||
* :attr:`~django.views.generic.base.TemplateResponseMixin.response_class`
|
||||
* :attr:`~django.views.generic.base.TemplateResponseMixin.template_name` [:meth:`~django.views.generic.base.TemplateResponseMixin.get_template_names`]
|
||||
* :attr:`~django.views.generic.list.MultipleObjectTemplateResponseMixin.template_name_suffix`
|
||||
|
||||
**Methods**
|
||||
|
||||
* :meth:`~django.views.generic.base.View.as_view`
|
||||
* :meth:`~django.views.generic.base.View.dispatch`
|
||||
* :meth:`~django.views.generic.dates.BaseDateListView.get`
|
||||
* :meth:`~django.views.generic.list.MultipleObjectMixin.get_context_data`
|
||||
* :meth:`~django.views.generic.dates.BaseDateListView.get_date_list`
|
||||
* :meth:`~django.views.generic.dates.BaseDateListView.get_dated_items`
|
||||
* :meth:`~django.views.generic.dates.BaseDateListView.get_dated_queryset`
|
||||
* :meth:`~django.views.generic.list.MultipleObjectMixin.get_paginator`
|
||||
* :meth:`~django.views.generic.base.View.head`
|
||||
* :meth:`~django.views.generic.base.View.http_method_not_allowed`
|
||||
* :meth:`~django.views.generic.list.MultipleObjectMixin.paginate_queryset`
|
||||
* :meth:`~django.views.generic.base.TemplateResponseMixin.render_to_response`
|
||||
|
||||
YearArchiveView
|
||||
~~~~~~~~~~~~~~~
|
||||
.. class:: YearArchiveView()
|
||||
|
||||
**Attributes** (with optional accessor):
|
||||
|
||||
* :attr:`~django.views.generic.list.MultipleObjectMixin.allow_empty` [:meth:`~django.views.generic.list.MultipleObjectMixin.get_allow_empty`]
|
||||
* :attr:`~django.views.generic.dates.DateMixin.allow_future` [:meth:`~django.views.generic.dates.DateMixin.get_allow_future`]
|
||||
* :attr:`~django.views.generic.list.MultipleObjectMixin.context_object_name` [:meth:`~django.views.generic.list.MultipleObjectMixin.get_context_object_name`]
|
||||
* :attr:`~django.views.generic.dates.DateMixin.date_field` [:meth:`~django.views.generic.dates.DateMixin.get_date_field`]
|
||||
* :attr:`~django.views.generic.base.View.http_method_names`
|
||||
* :attr:`~django.views.generic.dates.BaseYearArchiveView.make_object_list` [:meth:`~django.views.generic.dates.BaseYearArchiveView.get_make_object_list`]
|
||||
* :attr:`~django.views.generic.list.MultipleObjectMixin.model`
|
||||
* :attr:`~django.views.generic.list.MultipleObjectMixin.paginate_by` [:meth:`~django.views.generic.list.MultipleObjectMixin.get_paginate_by`]
|
||||
* :attr:`~django.views.generic.list.MultipleObjectMixin.paginator_class`
|
||||
* :attr:`~django.views.generic.list.MultipleObjectMixin.queryset` [:meth:`~django.views.generic.list.MultipleObjectMixin.get_queryset`]
|
||||
* :attr:`~django.views.generic.base.TemplateResponseMixin.response_class`
|
||||
* :attr:`~django.views.generic.base.TemplateResponseMixin.template_name` [:meth:`~django.views.generic.base.TemplateResponseMixin.get_template_names`]
|
||||
* :attr:`~django.views.generic.list.MultipleObjectTemplateResponseMixin.template_name_suffix`
|
||||
* :attr:`~django.views.generic.dates.YearMixin.year` [:meth:`~django.views.generic.dates.YearMixin.get_year`]
|
||||
* :attr:`~django.views.generic.dates.YearMixin.year_format` [:meth:`~django.views.generic.dates.YearMixin.get_year_format`]
|
||||
|
||||
**Methods**
|
||||
|
||||
* :meth:`~django.views.generic.base.View.as_view`
|
||||
* :meth:`~django.views.generic.base.View.dispatch`
|
||||
* :meth:`~django.views.generic.dates.BaseDateListView.get`
|
||||
* :meth:`~django.views.generic.list.MultipleObjectMixin.get_context_data`
|
||||
* :meth:`~django.views.generic.dates.BaseDateListView.get_date_list`
|
||||
* :meth:`~django.views.generic.dates.BaseDateListView.get_dated_items`
|
||||
* :meth:`~django.views.generic.dates.BaseDateListView.get_dated_queryset`
|
||||
* :meth:`~django.views.generic.list.MultipleObjectMixin.get_paginator`
|
||||
* :meth:`~django.views.generic.base.View.head`
|
||||
* :meth:`~django.views.generic.base.View.http_method_not_allowed`
|
||||
* :meth:`~django.views.generic.list.MultipleObjectMixin.paginate_queryset`
|
||||
* :meth:`~django.views.generic.base.TemplateResponseMixin.render_to_response`
|
||||
|
||||
MonthArchiveView
|
||||
~~~~~~~~~~~~~~~~
|
||||
.. class:: MonthArchiveView()
|
||||
|
||||
**Attributes** (with optional accessor):
|
||||
|
||||
* :attr:`~django.views.generic.list.MultipleObjectMixin.allow_empty` [:meth:`~django.views.generic.list.MultipleObjectMixin.get_allow_empty`]
|
||||
* :attr:`~django.views.generic.dates.DateMixin.allow_future` [:meth:`~django.views.generic.dates.DateMixin.get_allow_future`]
|
||||
* :attr:`~django.views.generic.list.MultipleObjectMixin.context_object_name` [:meth:`~django.views.generic.list.MultipleObjectMixin.get_context_object_name`]
|
||||
* :attr:`~django.views.generic.dates.DateMixin.date_field` [:meth:`~django.views.generic.dates.DateMixin.get_date_field`]
|
||||
* :attr:`~django.views.generic.base.View.http_method_names`
|
||||
* :attr:`~django.views.generic.list.MultipleObjectMixin.model`
|
||||
* :attr:`~django.views.generic.dates.MonthMixin.month` [:meth:`~django.views.generic.dates.MonthMixin.get_month`]
|
||||
* :attr:`~django.views.generic.dates.MonthMixin.month_format` [:meth:`~django.views.generic.dates.MonthMixin.get_month_format`]
|
||||
* :attr:`~django.views.generic.list.MultipleObjectMixin.paginate_by` [:meth:`~django.views.generic.list.MultipleObjectMixin.get_paginate_by`]
|
||||
* :attr:`~django.views.generic.list.MultipleObjectMixin.paginator_class`
|
||||
* :attr:`~django.views.generic.list.MultipleObjectMixin.queryset` [:meth:`~django.views.generic.list.MultipleObjectMixin.get_queryset`]
|
||||
* :attr:`~django.views.generic.base.TemplateResponseMixin.response_class`
|
||||
* :attr:`~django.views.generic.base.TemplateResponseMixin.template_name` [:meth:`~django.views.generic.base.TemplateResponseMixin.get_template_names`]
|
||||
* :attr:`~django.views.generic.list.MultipleObjectTemplateResponseMixin.template_name_suffix`
|
||||
* :attr:`~django.views.generic.dates.YearMixin.year` [:meth:`~django.views.generic.dates.YearMixin.get_year`]
|
||||
* :attr:`~django.views.generic.dates.YearMixin.year_format` [:meth:`~django.views.generic.dates.YearMixin.get_year_format`]
|
||||
|
||||
**Methods**
|
||||
|
||||
* :meth:`~django.views.generic.base.View.as_view`
|
||||
* :meth:`~django.views.generic.base.View.dispatch`
|
||||
* :meth:`~django.views.generic.dates.BaseDateListView.get`
|
||||
* :meth:`~django.views.generic.list.MultipleObjectMixin.get_context_data`
|
||||
* :meth:`~django.views.generic.dates.BaseDateListView.get_date_list`
|
||||
* :meth:`~django.views.generic.dates.BaseDateListView.get_dated_items`
|
||||
* :meth:`~django.views.generic.dates.BaseDateListView.get_dated_queryset`
|
||||
* :meth:`~django.views.generic.dates.MonthMixin.get_next_month`
|
||||
* :meth:`~django.views.generic.list.MultipleObjectMixin.get_paginator`
|
||||
* :meth:`~django.views.generic.dates.MonthMixin.get_previous_month`
|
||||
* :meth:`~django.views.generic.base.View.head`
|
||||
* :meth:`~django.views.generic.base.View.http_method_not_allowed`
|
||||
* :meth:`~django.views.generic.list.MultipleObjectMixin.paginate_queryset`
|
||||
* :meth:`~django.views.generic.base.TemplateResponseMixin.render_to_response`
|
||||
|
||||
WeekArchiveView
|
||||
~~~~~~~~~~~~~~~
|
||||
.. class:: WeekArchiveView()
|
||||
|
||||
**Attributes** (with optional accessor):
|
||||
|
||||
* :attr:`~django.views.generic.list.MultipleObjectMixin.allow_empty` [:meth:`~django.views.generic.list.MultipleObjectMixin.get_allow_empty`]
|
||||
* :attr:`~django.views.generic.dates.DateMixin.allow_future` [:meth:`~django.views.generic.dates.DateMixin.get_allow_future`]
|
||||
* :attr:`~django.views.generic.list.MultipleObjectMixin.context_object_name` [:meth:`~django.views.generic.list.MultipleObjectMixin.get_context_object_name`]
|
||||
* :attr:`~django.views.generic.dates.DateMixin.date_field` [:meth:`~django.views.generic.dates.DateMixin.get_date_field`]
|
||||
* :attr:`~django.views.generic.base.View.http_method_names`
|
||||
* :attr:`~django.views.generic.list.MultipleObjectMixin.model`
|
||||
* :attr:`~django.views.generic.list.MultipleObjectMixin.paginate_by` [:meth:`~django.views.generic.list.MultipleObjectMixin.get_paginate_by`]
|
||||
* :attr:`~django.views.generic.list.MultipleObjectMixin.paginator_class`
|
||||
* :attr:`~django.views.generic.list.MultipleObjectMixin.queryset` [:meth:`~django.views.generic.list.MultipleObjectMixin.get_queryset`]
|
||||
* :attr:`~django.views.generic.base.TemplateResponseMixin.response_class`
|
||||
* :attr:`~django.views.generic.base.TemplateResponseMixin.template_name` [:meth:`~django.views.generic.base.TemplateResponseMixin.get_template_names`]
|
||||
* :attr:`~django.views.generic.list.MultipleObjectTemplateResponseMixin.template_name_suffix`
|
||||
* :attr:`~django.views.generic.dates.WeekMixin.week` [:meth:`~django.views.generic.dates.WeekMixin.get_week`]
|
||||
* :attr:`~django.views.generic.dates.WeekMixin.week_format` [:meth:`~django.views.generic.dates.WeekMixin.get_week_format`]
|
||||
* :attr:`~django.views.generic.dates.YearMixin.year` [:meth:`~django.views.generic.dates.YearMixin.get_year`]
|
||||
* :attr:`~django.views.generic.dates.YearMixin.year_format` [:meth:`~django.views.generic.dates.YearMixin.get_year_format`]
|
||||
|
||||
**Methods**
|
||||
|
||||
* :meth:`~django.views.generic.base.View.as_view`
|
||||
* :meth:`~django.views.generic.base.View.dispatch`
|
||||
* :meth:`~django.views.generic.dates.BaseDateListView.get`
|
||||
* :meth:`~django.views.generic.list.MultipleObjectMixin.get_context_data`
|
||||
* :meth:`~django.views.generic.dates.BaseDateListView.get_date_list`
|
||||
* :meth:`~django.views.generic.dates.BaseDateListView.get_dated_items`
|
||||
* :meth:`~django.views.generic.dates.BaseDateListView.get_dated_queryset`
|
||||
* :meth:`~django.views.generic.list.MultipleObjectMixin.get_paginator`
|
||||
* :meth:`~django.views.generic.base.View.head`
|
||||
* :meth:`~django.views.generic.base.View.http_method_not_allowed`
|
||||
* :meth:`~django.views.generic.list.MultipleObjectMixin.paginate_queryset`
|
||||
* :meth:`~django.views.generic.base.TemplateResponseMixin.render_to_response`
|
||||
|
||||
DayArchiveView
|
||||
~~~~~~~~~~~~~~
|
||||
.. class:: DayArchiveView()
|
||||
|
||||
**Attributes** (with optional accessor):
|
||||
|
||||
* :attr:`~django.views.generic.list.MultipleObjectMixin.allow_empty` [:meth:`~django.views.generic.list.MultipleObjectMixin.get_allow_empty`]
|
||||
* :attr:`~django.views.generic.dates.DateMixin.allow_future` [:meth:`~django.views.generic.dates.DateMixin.get_allow_future`]
|
||||
* :attr:`~django.views.generic.list.MultipleObjectMixin.context_object_name` [:meth:`~django.views.generic.list.MultipleObjectMixin.get_context_object_name`]
|
||||
* :attr:`~django.views.generic.dates.DateMixin.date_field` [:meth:`~django.views.generic.dates.DateMixin.get_date_field`]
|
||||
* :attr:`~django.views.generic.dates.DayMixin.day` [:meth:`~django.views.generic.dates.DayMixin.get_day`]
|
||||
* :attr:`~django.views.generic.dates.DayMixin.day_format` [:meth:`~django.views.generic.dates.DayMixin.get_day_format`]
|
||||
* :attr:`~django.views.generic.base.View.http_method_names`
|
||||
* :attr:`~django.views.generic.list.MultipleObjectMixin.model`
|
||||
* :attr:`~django.views.generic.dates.MonthMixin.month` [:meth:`~django.views.generic.dates.MonthMixin.get_month`]
|
||||
* :attr:`~django.views.generic.dates.MonthMixin.month_format` [:meth:`~django.views.generic.dates.MonthMixin.get_month_format`]
|
||||
* :attr:`~django.views.generic.list.MultipleObjectMixin.paginate_by` [:meth:`~django.views.generic.list.MultipleObjectMixin.get_paginate_by`]
|
||||
* :attr:`~django.views.generic.list.MultipleObjectMixin.paginator_class`
|
||||
* :attr:`~django.views.generic.list.MultipleObjectMixin.queryset` [:meth:`~django.views.generic.list.MultipleObjectMixin.get_queryset`]
|
||||
* :attr:`~django.views.generic.base.TemplateResponseMixin.response_class`
|
||||
* :attr:`~django.views.generic.base.TemplateResponseMixin.template_name` [:meth:`~django.views.generic.base.TemplateResponseMixin.get_template_names`]
|
||||
* :attr:`~django.views.generic.list.MultipleObjectTemplateResponseMixin.template_name_suffix`
|
||||
* :attr:`~django.views.generic.dates.YearMixin.year` [:meth:`~django.views.generic.dates.YearMixin.get_year`]
|
||||
* :attr:`~django.views.generic.dates.YearMixin.year_format` [:meth:`~django.views.generic.dates.YearMixin.get_year_format`]
|
||||
|
||||
**Methods**
|
||||
|
||||
* :meth:`~django.views.generic.base.View.as_view`
|
||||
* :meth:`~django.views.generic.base.View.dispatch`
|
||||
* :meth:`~django.views.generic.dates.BaseDateListView.get`
|
||||
* :meth:`~django.views.generic.list.MultipleObjectMixin.get_context_data`
|
||||
* :meth:`~django.views.generic.dates.BaseDateListView.get_date_list`
|
||||
* :meth:`~django.views.generic.dates.BaseDateListView.get_dated_items`
|
||||
* :meth:`~django.views.generic.dates.BaseDateListView.get_dated_queryset`
|
||||
* :meth:`~django.views.generic.dates.DayMixin.get_next_day`
|
||||
* :meth:`~django.views.generic.dates.MonthMixin.get_next_month`
|
||||
* :meth:`~django.views.generic.list.MultipleObjectMixin.get_paginator`
|
||||
* :meth:`~django.views.generic.dates.DayMixin.get_previous_day`
|
||||
* :meth:`~django.views.generic.dates.MonthMixin.get_previous_month`
|
||||
* :meth:`~django.views.generic.base.View.head`
|
||||
* :meth:`~django.views.generic.base.View.http_method_not_allowed`
|
||||
* :meth:`~django.views.generic.list.MultipleObjectMixin.paginate_queryset`
|
||||
* :meth:`~django.views.generic.base.TemplateResponseMixin.render_to_response`
|
||||
|
||||
TodayArchiveView
|
||||
~~~~~~~~~~~~~~~~
|
||||
.. class:: TodayArchiveView()
|
||||
|
||||
**Attributes** (with optional accessor):
|
||||
|
||||
* :attr:`~django.views.generic.list.MultipleObjectMixin.allow_empty` [:meth:`~django.views.generic.list.MultipleObjectMixin.get_allow_empty`]
|
||||
* :attr:`~django.views.generic.dates.DateMixin.allow_future` [:meth:`~django.views.generic.dates.DateMixin.get_allow_future`]
|
||||
* :attr:`~django.views.generic.list.MultipleObjectMixin.context_object_name` [:meth:`~django.views.generic.list.MultipleObjectMixin.get_context_object_name`]
|
||||
* :attr:`~django.views.generic.dates.DateMixin.date_field` [:meth:`~django.views.generic.dates.DateMixin.get_date_field`]
|
||||
* :attr:`~django.views.generic.dates.DayMixin.day` [:meth:`~django.views.generic.dates.DayMixin.get_day`]
|
||||
* :attr:`~django.views.generic.dates.DayMixin.day_format` [:meth:`~django.views.generic.dates.DayMixin.get_day_format`]
|
||||
* :attr:`~django.views.generic.base.View.http_method_names`
|
||||
* :attr:`~django.views.generic.list.MultipleObjectMixin.model`
|
||||
* :attr:`~django.views.generic.dates.MonthMixin.month` [:meth:`~django.views.generic.dates.MonthMixin.get_month`]
|
||||
* :attr:`~django.views.generic.dates.MonthMixin.month_format` [:meth:`~django.views.generic.dates.MonthMixin.get_month_format`]
|
||||
* :attr:`~django.views.generic.list.MultipleObjectMixin.paginate_by` [:meth:`~django.views.generic.list.MultipleObjectMixin.get_paginate_by`]
|
||||
* :attr:`~django.views.generic.list.MultipleObjectMixin.paginator_class`
|
||||
* :attr:`~django.views.generic.list.MultipleObjectMixin.queryset` [:meth:`~django.views.generic.list.MultipleObjectMixin.get_queryset`]
|
||||
* :attr:`~django.views.generic.base.TemplateResponseMixin.response_class`
|
||||
* :attr:`~django.views.generic.base.TemplateResponseMixin.template_name` [:meth:`~django.views.generic.base.TemplateResponseMixin.get_template_names`]
|
||||
* :attr:`~django.views.generic.list.MultipleObjectTemplateResponseMixin.template_name_suffix`
|
||||
* :attr:`~django.views.generic.dates.YearMixin.year` [:meth:`~django.views.generic.dates.YearMixin.get_year`]
|
||||
* :attr:`~django.views.generic.dates.YearMixin.year_format` [:meth:`~django.views.generic.dates.YearMixin.get_year_format`]
|
||||
|
||||
**Methods**
|
||||
|
||||
* :meth:`~django.views.generic.base.View.as_view`
|
||||
* :meth:`~django.views.generic.base.View.dispatch`
|
||||
* :meth:`~django.views.generic.dates.BaseDateListView.get`
|
||||
* :meth:`~django.views.generic.list.MultipleObjectMixin.get_context_data`
|
||||
* :meth:`~django.views.generic.dates.BaseDateListView.get_date_list`
|
||||
* :meth:`~django.views.generic.dates.BaseDateListView.get_dated_items`
|
||||
* :meth:`~django.views.generic.dates.BaseDateListView.get_dated_queryset`
|
||||
* :meth:`~django.views.generic.dates.DayMixin.get_next_day`
|
||||
* :meth:`~django.views.generic.dates.MonthMixin.get_next_month`
|
||||
* :meth:`~django.views.generic.list.MultipleObjectMixin.get_paginator`
|
||||
* :meth:`~django.views.generic.dates.DayMixin.get_previous_day`
|
||||
* :meth:`~django.views.generic.dates.MonthMixin.get_previous_month`
|
||||
* :meth:`~django.views.generic.base.View.head`
|
||||
* :meth:`~django.views.generic.base.View.http_method_not_allowed`
|
||||
* :meth:`~django.views.generic.list.MultipleObjectMixin.paginate_queryset`
|
||||
* :meth:`~django.views.generic.base.TemplateResponseMixin.render_to_response`
|
||||
|
||||
DateDetailView
|
||||
~~~~~~~~~~~~~~
|
||||
.. class:: DateDetailView()
|
||||
|
||||
**Attributes** (with optional accessor):
|
||||
|
||||
* :attr:`~django.views.generic.dates.DateMixin.allow_future` [:meth:`~django.views.generic.dates.DateMixin.get_allow_future`]
|
||||
* :attr:`~django.views.generic.detail.SingleObjectMixin.context_object_name` [:meth:`~django.views.generic.detail.SingleObjectMixin.get_context_object_name`]
|
||||
* :attr:`~django.views.generic.dates.DateMixin.date_field` [:meth:`~django.views.generic.dates.DateMixin.get_date_field`]
|
||||
* :attr:`~django.views.generic.dates.DayMixin.day` [:meth:`~django.views.generic.dates.DayMixin.get_day`]
|
||||
* :attr:`~django.views.generic.dates.DayMixin.day_format` [:meth:`~django.views.generic.dates.DayMixin.get_day_format`]
|
||||
* :attr:`~django.views.generic.base.View.http_method_names`
|
||||
* :attr:`~django.views.generic.detail.SingleObjectMixin.model`
|
||||
* :attr:`~django.views.generic.dates.MonthMixin.month` [:meth:`~django.views.generic.dates.MonthMixin.get_month`]
|
||||
* :attr:`~django.views.generic.dates.MonthMixin.month_format` [:meth:`~django.views.generic.dates.MonthMixin.get_month_format`]
|
||||
* :attr:`~django.views.generic.detail.SingleObjectMixin.pk_url_kwarg`
|
||||
* :attr:`~django.views.generic.detail.SingleObjectMixin.queryset` [:meth:`~django.views.generic.detail.SingleObjectMixin.get_queryset`]
|
||||
* :attr:`~django.views.generic.base.TemplateResponseMixin.response_class`
|
||||
* :attr:`~django.views.generic.detail.SingleObjectMixin.slug_field` [:meth:`~django.views.generic.detail.SingleObjectMixin.get_slug_field`]
|
||||
* :attr:`~django.views.generic.detail.SingleObjectMixin.slug_url_kwarg`
|
||||
* :attr:`~django.views.generic.base.TemplateResponseMixin.template_name` [:meth:`~django.views.generic.base.TemplateResponseMixin.get_template_names`]
|
||||
* :attr:`~django.views.generic.detail.SingleObjectTemplateResponseMixin.template_name_field`
|
||||
* :attr:`~django.views.generic.detail.SingleObjectTemplateResponseMixin.template_name_suffix`
|
||||
* :attr:`~django.views.generic.dates.YearMixin.year` [:meth:`~django.views.generic.dates.YearMixin.get_year`]
|
||||
* :attr:`~django.views.generic.dates.YearMixin.year_format` [:meth:`~django.views.generic.dates.YearMixin.get_year_format`]
|
||||
|
||||
**Methods**
|
||||
|
||||
* :meth:`~django.views.generic.base.View.as_view`
|
||||
* :meth:`~django.views.generic.base.View.dispatch`
|
||||
* :meth:`~django.views.generic.detail.BaseDetailView.get`
|
||||
* :meth:`~django.views.generic.detail.SingleObjectMixin.get_context_data`
|
||||
* :meth:`~django.views.generic.dates.DayMixin.get_next_day`
|
||||
* :meth:`~django.views.generic.dates.MonthMixin.get_next_month`
|
||||
* :meth:`~django.views.generic.detail.SingleObjectMixin.get_object`
|
||||
* :meth:`~django.views.generic.dates.DayMixin.get_previous_day`
|
||||
* :meth:`~django.views.generic.dates.MonthMixin.get_previous_month`
|
||||
* :meth:`~django.views.generic.base.View.head`
|
||||
* :meth:`~django.views.generic.base.View.http_method_not_allowed`
|
||||
* :meth:`~django.views.generic.base.TemplateResponseMixin.render_to_response`
|
||||
|
|
@ -13,6 +13,7 @@ Class-based views API reference. For introductory material, see
|
|||
generic-editing
|
||||
generic-date-based
|
||||
mixins
|
||||
flattened-index
|
||||
|
||||
Specification
|
||||
-------------
|
||||
|
|
|
|||
|
|
@ -561,8 +561,6 @@ subclass::
|
|||
|
||||
.. attribute:: ModelAdmin.list_filter
|
||||
|
||||
.. versionchanged:: 1.4
|
||||
|
||||
Set ``list_filter`` to activate filters in the right sidebar of the change
|
||||
list page of the admin, as illustrated in the following screenshot:
|
||||
|
||||
|
|
@ -586,6 +584,8 @@ subclass::
|
|||
class PersonAdmin(UserAdmin):
|
||||
list_filter = ('company__name',)
|
||||
|
||||
.. versionadded:: 1.4
|
||||
|
||||
* a class inheriting from :mod:`django.contrib.admin.SimpleListFilter`,
|
||||
which you need to provide the ``title`` and ``parameter_name``
|
||||
attributes to and override the ``lookups`` and ``queryset`` methods,
|
||||
|
|
@ -671,6 +671,8 @@ subclass::
|
|||
birthday__lte=date(1999, 12, 31)).exists():
|
||||
yield ('90s', _('in the nineties'))
|
||||
|
||||
.. versionadded:: 1.4
|
||||
|
||||
* a tuple, where the first element is a field name and the second
|
||||
element is a class inheriting from
|
||||
:mod:`django.contrib.admin.FieldListFilter`, for example::
|
||||
|
|
|
|||
|
|
@ -158,11 +158,13 @@ For example::
|
|||
|
||||
.. warning::
|
||||
|
||||
There's a known bug in Safari/Webkit which causes the named anchor to be
|
||||
There's a `known bug`_ in Safari/Webkit which causes the named anchor to be
|
||||
forgotten following a redirect. The practical impact for comments is that
|
||||
the Safari/webkit browsers will arrive at the correct page but will not
|
||||
scroll to the named anchor.
|
||||
|
||||
.. _`known bug`: https://bugs.webkit.org/show_bug.cgi?id=24175
|
||||
|
||||
.. templatetag:: get_comment_count
|
||||
|
||||
Counting comments
|
||||
|
|
|
|||
|
|
@ -84,47 +84,94 @@ AJAX
|
|||
While the above method can be used for AJAX POST requests, it has some
|
||||
inconveniences: you have to remember to pass the CSRF token in as POST data with
|
||||
every POST request. For this reason, there is an alternative method: on each
|
||||
XMLHttpRequest, set a custom `X-CSRFToken` header to the value of the CSRF
|
||||
XMLHttpRequest, set a custom ``X-CSRFToken`` header to the value of the CSRF
|
||||
token. This is often easier, because many javascript frameworks provide hooks
|
||||
that allow headers to be set on every request. In jQuery, you can use the
|
||||
``ajaxSend`` event as follows:
|
||||
that allow headers to be set on every request.
|
||||
|
||||
As a first step, you must get the CSRF token itself. The recommended source for
|
||||
the token is the ``csrftoken`` cookie, which will be set if you've enabled CSRF
|
||||
protection for your views as outlined above.
|
||||
|
||||
.. note::
|
||||
|
||||
The CSRF token cookie is named ``csrftoken`` by default, but you can control
|
||||
the cookie name via the :setting:`CSRF_COOKIE_NAME` setting.
|
||||
|
||||
Acquiring the token is straightforward:
|
||||
|
||||
.. code-block:: javascript
|
||||
|
||||
jQuery(document).ajaxSend(function(event, xhr, settings) {
|
||||
function getCookie(name) {
|
||||
var cookieValue = null;
|
||||
if (document.cookie && document.cookie != '') {
|
||||
var cookies = document.cookie.split(';');
|
||||
for (var i = 0; i < cookies.length; i++) {
|
||||
var cookie = jQuery.trim(cookies[i]);
|
||||
// Does this cookie string begin with the name we want?
|
||||
if (cookie.substring(0, name.length + 1) == (name + '=')) {
|
||||
cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
|
||||
break;
|
||||
}
|
||||
// using jQuery
|
||||
function getCookie(name) {
|
||||
var cookieValue = null;
|
||||
if (document.cookie && document.cookie != '') {
|
||||
var cookies = document.cookie.split(';');
|
||||
for (var i = 0; i < cookies.length; i++) {
|
||||
var cookie = jQuery.trim(cookies[i]);
|
||||
// Does this cookie string begin with the name we want?
|
||||
if (cookie.substring(0, name.length + 1) == (name + '=')) {
|
||||
cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
|
||||
break;
|
||||
}
|
||||
}
|
||||
return cookieValue;
|
||||
}
|
||||
function sameOrigin(url) {
|
||||
// url could be relative or scheme relative or absolute
|
||||
var host = document.location.host; // host + port
|
||||
var protocol = document.location.protocol;
|
||||
var sr_origin = '//' + host;
|
||||
var origin = protocol + sr_origin;
|
||||
// Allow absolute or scheme relative URLs to same origin
|
||||
return (url == origin || url.slice(0, origin.length + 1) == origin + '/') ||
|
||||
(url == sr_origin || url.slice(0, sr_origin.length + 1) == sr_origin + '/') ||
|
||||
// or any other URL that isn't scheme relative or absolute i.e relative.
|
||||
!(/^(\/\/|http:|https:).*/.test(url));
|
||||
}
|
||||
function safeMethod(method) {
|
||||
return (/^(GET|HEAD|OPTIONS|TRACE)$/.test(method));
|
||||
}
|
||||
return cookieValue;
|
||||
}
|
||||
var csrftoken = getCookie('csrftoken');
|
||||
|
||||
if (!safeMethod(settings.type) && sameOrigin(settings.url)) {
|
||||
xhr.setRequestHeader("X-CSRFToken", getCookie('csrftoken'));
|
||||
The above code could be simplified by using the `jQuery cookie plugin
|
||||
<http://plugins.jquery.com/project/Cookie>`_ to replace ``getCookie``:
|
||||
|
||||
.. code-block:: javascript
|
||||
|
||||
var csrftoken = $.cookie('csrftoken');
|
||||
|
||||
.. note::
|
||||
|
||||
The CSRF token is also present in the DOM, but only if explicitly included
|
||||
using :ttag:`csrf_token` in a template. The cookie contains the canonical
|
||||
token; the ``CsrfViewMiddleware`` will prefer the cookie to the token in
|
||||
the DOM. Regardless, you're guaranteed to have the cookie if the token is
|
||||
present in the DOM, so you should use the cookie!
|
||||
|
||||
.. warning::
|
||||
|
||||
If your view is not rendering a template containing the :ttag:`csrf_token`
|
||||
template tag, Django might not set the CSRF token cookie. This is common in
|
||||
cases where forms are dynamically added to the page. To address this case,
|
||||
Django provides a view decorator which forces setting of the cookie:
|
||||
:func:`~django.views.decorators.csrf.ensure_csrf_cookie`.
|
||||
|
||||
Finally, you'll have to actually set the header on your AJAX request, while
|
||||
protecting the CSRF token from being sent to other domains.
|
||||
|
||||
.. code-block:: javascript
|
||||
|
||||
function csrfSafeMethod(method) {
|
||||
// these HTTP methods do not require CSRF protection
|
||||
return (/^(GET|HEAD|OPTIONS|TRACE)$/.test(method));
|
||||
}
|
||||
function sameOrigin(url) {
|
||||
// test that a given url is a same-origin URL
|
||||
// url could be relative or scheme relative or absolute
|
||||
var host = document.location.host; // host + port
|
||||
var protocol = document.location.protocol;
|
||||
var sr_origin = '//' + host;
|
||||
var origin = protocol + sr_origin;
|
||||
// Allow absolute or scheme relative URLs to same origin
|
||||
return (url == origin || url.slice(0, origin.length + 1) == origin + '/') ||
|
||||
(url == sr_origin || url.slice(0, sr_origin.length + 1) == sr_origin + '/') ||
|
||||
// or any other URL that isn't scheme relative or absolute i.e relative.
|
||||
!(/^(\/\/|http:|https:).*/.test(url));
|
||||
}
|
||||
$.ajaxSetup({
|
||||
beforeSend: function(xhr, settings) {
|
||||
if (!csrfSafeMethod(settings.type) && sameOrigin(settings.url)) {
|
||||
// Send the token to same-origin, relative URLs only.
|
||||
// Send the token only if the method warrants CSRF protection
|
||||
// Using the CSRFToken value acquired earlier
|
||||
xhr.setRequestHeader("X-CSRFToken", csrftoken);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
|
|
@ -133,18 +180,32 @@ that allow headers to be set on every request. In jQuery, you can use the
|
|||
Due to a bug introduced in jQuery 1.5, the example above will not work
|
||||
correctly on that version. Make sure you are running at least jQuery 1.5.1.
|
||||
|
||||
Adding this to a javascript file that is included on your site will ensure that
|
||||
AJAX POST requests that are made via jQuery will not be caught by the CSRF
|
||||
protection.
|
||||
You can use `settings.crossDomain <http://api.jquery.com/jQuery.ajax>`_ in
|
||||
jQuery 1.5 and newer in order to replace the `sameOrigin` logic above:
|
||||
|
||||
The above code could be simplified by using the `jQuery cookie plugin
|
||||
<http://plugins.jquery.com/project/Cookie>`_ to replace ``getCookie``, and
|
||||
`settings.crossDomain <http://api.jquery.com/jQuery.ajax>`_ in jQuery 1.5 and
|
||||
later to replace ``sameOrigin``.
|
||||
.. code-block:: javascript
|
||||
|
||||
In addition, if the CSRF cookie has not been sent to the client by use of
|
||||
:ttag:`csrf_token`, you may need to ensure the client receives the cookie by
|
||||
using :func:`~django.views.decorators.csrf.ensure_csrf_cookie`.
|
||||
function csrfSafeMethod(method) {
|
||||
// these HTTP methods do not require CSRF protection
|
||||
return (/^(GET|HEAD|OPTIONS|TRACE)$/.test(method));
|
||||
}
|
||||
$.ajaxSetup({
|
||||
crossDomain: false, // obviates need for sameOrigin test
|
||||
beforeSend: function(xhr, settings) {
|
||||
if (!csrfSafeMethod(settings.type)) {
|
||||
xhr.setRequestHeader("X-CSRFToken", csrftoken);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
.. note::
|
||||
|
||||
In a `security release blogpost`_, a simpler "same origin test" example
|
||||
was provided which only checked for a relative URL. The ``sameOrigin``
|
||||
test above supersedes that example—it works for edge cases like
|
||||
scheme-relative or absolute URLs for the same domain.
|
||||
|
||||
.. _security release blogpost: https://www.djangoproject.com/weblog/2011/feb/08/security/
|
||||
|
||||
Other template engines
|
||||
----------------------
|
||||
|
|
|
|||
|
|
@ -42,6 +42,16 @@ To install the flatpages app, follow these steps:
|
|||
2. Add ``'django.contrib.flatpages'`` to your :setting:`INSTALLED_APPS`
|
||||
setting.
|
||||
|
||||
Then either:
|
||||
|
||||
3. Add an entry in your URLconf. For example::
|
||||
|
||||
urlpatterns = patterns('',
|
||||
('^pages/', include('django.contrib.flatpages.urls')),
|
||||
)
|
||||
|
||||
or:
|
||||
|
||||
3. Add ``'django.contrib.flatpages.middleware.FlatpageFallbackMiddleware'``
|
||||
to your :setting:`MIDDLEWARE_CLASSES` setting.
|
||||
|
||||
|
|
@ -57,8 +67,38 @@ and ``django_flatpage_sites``. ``django_flatpage`` is a simple lookup table
|
|||
that simply maps a URL to a title and bunch of text content.
|
||||
``django_flatpage_sites`` associates a flatpage with a site.
|
||||
|
||||
Using the URLconf
|
||||
-----------------
|
||||
|
||||
There are several ways to include the flat pages in your URLconf. You can
|
||||
dedicate a particular path to flat pages::
|
||||
|
||||
urlpatterns = patterns('',
|
||||
('^pages/', include('django.contrib.flatpages.urls')),
|
||||
)
|
||||
|
||||
You can also set it up as a "catchall" pattern. In this case, it is important
|
||||
to place the pattern at the end of the other urlpatterns::
|
||||
|
||||
# Your other patterns here
|
||||
urlpatterns += patterns('django.contrib.flatpages.views',
|
||||
(r'^(?P<url>.*)$', 'flatpage'),
|
||||
)
|
||||
|
||||
Another common setup is to use flat pages for a limited set of known pages and
|
||||
to hard code the urls, so you can reference them with the :ttag:`url` template
|
||||
tag::
|
||||
|
||||
urlpatterns += patterns('django.contrib.flatpages.views',
|
||||
url(r'^about-us/$', 'flatpage', {'url': '/about-us/'}, name='about'),
|
||||
url(r'^license/$', 'flatpage', {'url': '/license/'}, name='license'),
|
||||
)
|
||||
|
||||
Using the middleware
|
||||
--------------------
|
||||
|
||||
The :class:`~django.contrib.flatpages.middleware.FlatpageFallbackMiddleware`
|
||||
does all of the work.
|
||||
can do all of the work.
|
||||
|
||||
.. class:: FlatpageFallbackMiddleware
|
||||
|
||||
|
|
@ -255,4 +295,3 @@ For example:
|
|||
{% get_flatpages '/about/' as about_pages %}
|
||||
{% get_flatpages about_prefix as about_pages %}
|
||||
{% get_flatpages '/about/' for someuser as about_pages %}
|
||||
|
||||
|
|
|
|||
|
|
@ -582,7 +582,7 @@ Creating a spatial database for SpatiaLite
|
|||
After you've installed SpatiaLite, you'll need to create a number of spatial
|
||||
metadata tables in your database in order to perform spatial queries.
|
||||
|
||||
If you're using SpatiaLite 3.0 or newer, use the ``spatialite`` utility to
|
||||
If you're using SpatiaLite 2.4 or newer, use the ``spatialite`` utility to
|
||||
call the ``InitSpatialMetaData()`` function, like this::
|
||||
|
||||
$ spatialite geodjango.db "SELECT InitSpatialMetaData();"
|
||||
|
|
@ -593,12 +593,10 @@ call the ``InitSpatialMetaData()`` function, like this::
|
|||
You can safely ignore the error messages shown. When you've done this, you can
|
||||
skip the rest of this section.
|
||||
|
||||
If you're using a version of SpatiaLite older than 3.0, you'll need to download
|
||||
a database-initialization file and execute its SQL queries in your database.
|
||||
If you're using SpatiaLite 2.3, you'll need to download a
|
||||
database-initialization file and execute its SQL queries in your database.
|
||||
|
||||
First, get it from the appropriate SpatiaLite Resources page (
|
||||
http://www.gaia-gis.it/spatialite-2.3.1/resources.html for 2.3 or
|
||||
http://www.gaia-gis.it/spatialite-2.4.0/ for 2.4)::
|
||||
First, get it from the `SpatiaLite Resources`__ page::
|
||||
|
||||
$ wget http://www.gaia-gis.it/spatialite-2.3.1/init_spatialite-2.3.sql.gz
|
||||
$ gunzip init_spatialite-2.3.sql.gz
|
||||
|
|
@ -613,6 +611,8 @@ Then, use the ``spatialite`` command to initialize a spatial database::
|
|||
you want to use. Use the same in the :setting:`DATABASES` ``"name"`` key
|
||||
inside your ``settings.py``.
|
||||
|
||||
__ http://www.gaia-gis.it/spatialite-2.3.1/resources.html
|
||||
|
||||
Add ``django.contrib.gis`` to :setting:`INSTALLED_APPS`
|
||||
-------------------------------------------------------
|
||||
|
||||
|
|
@ -820,8 +820,10 @@ Download the framework packages for:
|
|||
* GDAL
|
||||
|
||||
Install the packages in the order they are listed above, as the GDAL and SQLite
|
||||
packages require the packages listed before them. Afterwards, you can also
|
||||
install the KyngChaos binary packages for `PostgreSQL and PostGIS`__.
|
||||
packages require the packages listed before them.
|
||||
|
||||
Afterwards, you can also install the KyngChaos binary packages for `PostgreSQL
|
||||
and PostGIS`__.
|
||||
|
||||
After installing the binary packages, you'll want to add the following to
|
||||
your ``.profile`` to be able to run the package programs from the command-line::
|
||||
|
|
|
|||
|
|
@ -119,7 +119,7 @@ Settings
|
|||
``SPATIALITE_SQL``
|
||||
^^^^^^^^^^^^^^^^^^
|
||||
|
||||
Only relevant when using a SpatiaLite version older than 3.0.
|
||||
Only relevant when using a SpatiaLite version 2.3.
|
||||
|
||||
By default, the GeoDjango test runner looks for the :ref:`file containing the
|
||||
SpatiaLite dababase-initialization SQL code <create_spatialite_db>` in the
|
||||
|
|
|
|||
|
|
@ -671,6 +671,17 @@ of abstraction::
|
|||
|
||||
__ http://spatialreference.org/ref/epsg/32140/
|
||||
|
||||
.. admonition:: Raw queries
|
||||
|
||||
When using :doc:`raw queries </topics/db/sql>`, you should generally wrap
|
||||
your geometry fields with the ``asText()`` SQL function so as the field
|
||||
value will be recognized by GEOS::
|
||||
|
||||
City.objects.raw('SELECT id, name, asText(point) from myapp_city')
|
||||
|
||||
This is not absolutely required by PostGIS, but generally you should only
|
||||
use raw queries when you know exactly what you are doing.
|
||||
|
||||
Lazy Geometries
|
||||
---------------
|
||||
Geometries come to GeoDjango in a standardized textual representation. Upon
|
||||
|
|
|
|||
|
|
@ -91,14 +91,18 @@ The ``ContentFile`` Class
|
|||
.. class:: ContentFile(File)
|
||||
|
||||
The ``ContentFile`` class inherits from :class:`~django.core.files.File`,
|
||||
but unlike :class:`~django.core.files.File` it operates on string content,
|
||||
rather than an actual file. For example::
|
||||
but unlike :class:`~django.core.files.File` it operates on string content
|
||||
(bytes also supported), rather than an actual file. For example::
|
||||
|
||||
from __future__ import unicode_literals
|
||||
from django.core.files.base import ContentFile
|
||||
|
||||
f1 = ContentFile(b"my string content")
|
||||
f2 = ContentFile("my unicode content encoded as UTF-8".encode('UTF-8'))
|
||||
f1 = ContentFile("esta sentencia está en español")
|
||||
f2 = ContentFile(b"these are bytes")
|
||||
|
||||
.. versionchanged:: 1.5
|
||||
|
||||
ContentFile also accepts Unicode strings.
|
||||
|
||||
.. currentmodule:: django.core.files.images
|
||||
|
||||
|
|
|
|||
|
|
@ -70,8 +70,8 @@ If ``True``, the field is allowed to be blank. Default is ``False``.
|
|||
|
||||
Note that this is different than :attr:`~Field.null`. :attr:`~Field.null` is
|
||||
purely database-related, whereas :attr:`~Field.blank` is validation-related. If
|
||||
a field has ``blank=True``, validation on Django's admin site will allow entry
|
||||
of an empty value. If a field has ``blank=False``, the field will be required.
|
||||
a field has ``blank=True``, form validation will allow entry of an empty value.
|
||||
If a field has ``blank=False``, the field will be required.
|
||||
|
||||
.. _field-choices:
|
||||
|
||||
|
|
@ -81,14 +81,11 @@ of an empty value. If a field has ``blank=False``, the field will be required.
|
|||
.. attribute:: Field.choices
|
||||
|
||||
An iterable (e.g., a list or tuple) of 2-tuples to use as choices for this
|
||||
field.
|
||||
field. If this is given, the default form widget will be a select box with
|
||||
these choices instead of the standard text field.
|
||||
|
||||
If this is given, Django's admin will use a select box instead of the standard
|
||||
text field and will limit choices to the choices given.
|
||||
|
||||
A choices list is an iterable of 2-tuples; the first element in each
|
||||
tuple is the actual value to be stored, and the second element is the
|
||||
human-readable name. For example::
|
||||
The first element in each tuple is the actual value to be stored, and the
|
||||
second element is the human-readable name. For example::
|
||||
|
||||
YEAR_IN_SCHOOL_CHOICES = (
|
||||
('FR', 'Freshman'),
|
||||
|
|
@ -176,7 +173,7 @@ scenes.
|
|||
|
||||
.. attribute:: Field.db_index
|
||||
|
||||
If ``True``, djadmin:`django-admin.py sqlindexes <sqlindexes>` will output a
|
||||
If ``True``, :djadmin:`django-admin.py sqlindexes <sqlindexes>` will output a
|
||||
``CREATE INDEX`` statement for this field.
|
||||
|
||||
``db_tablespace``
|
||||
|
|
@ -203,8 +200,8 @@ callable it will be called every time a new object is created.
|
|||
|
||||
.. attribute:: Field.editable
|
||||
|
||||
If ``False``, the field will not be editable in the admin or via forms
|
||||
automatically generated from the model class. Default is ``True``.
|
||||
If ``False``, the field will not be displayed in the admin or any other
|
||||
:class:`~django.forms.ModelForm`. Default is ``True``.
|
||||
|
||||
``error_messages``
|
||||
------------------
|
||||
|
|
@ -224,11 +221,11 @@ the `Field types`_ section below.
|
|||
|
||||
.. attribute:: Field.help_text
|
||||
|
||||
Extra "help" text to be displayed under the field on the object's admin form.
|
||||
It's useful for documentation even if your object doesn't have an admin form.
|
||||
Extra "help" text to be displayed with the form widget. It's useful for
|
||||
documentation even if your field isn't used on a form.
|
||||
|
||||
Note that this value is *not* HTML-escaped when it's displayed in the admin
|
||||
interface. This lets you include HTML in :attr:`~Field.help_text` if you so
|
||||
Note that this value is *not* HTML-escaped in automatically-generated
|
||||
forms. This lets you include HTML in :attr:`~Field.help_text` if you so
|
||||
desire. For example::
|
||||
|
||||
help_text="Please use the following format: <em>YYYY-MM-DD</em>."
|
||||
|
|
@ -259,7 +256,7 @@ Only one primary key is allowed on an object.
|
|||
|
||||
If ``True``, this field must be unique throughout the table.
|
||||
|
||||
This is enforced at the database level and at the Django admin-form level. If
|
||||
This is enforced at the database level and by model validation. If
|
||||
you try to save a model with a duplicate value in a :attr:`~Field.unique`
|
||||
field, a :exc:`django.db.IntegrityError` will be raised by the model's
|
||||
:meth:`~django.db.models.Model.save` method.
|
||||
|
|
@ -279,7 +276,7 @@ For example, if you have a field ``title`` that has
|
|||
``unique_for_date="pub_date"``, then Django wouldn't allow the entry of two
|
||||
records with the same ``title`` and ``pub_date``.
|
||||
|
||||
This is enforced at the Django admin-form level but not at the database level.
|
||||
This is enforced by model validation but not at the database level.
|
||||
|
||||
``unique_for_month``
|
||||
--------------------
|
||||
|
|
@ -337,7 +334,7 @@ otherwise. See :ref:`automatic-primary-key-fields`.
|
|||
|
||||
A 64 bit integer, much like an :class:`IntegerField` except that it is
|
||||
guaranteed to fit numbers from -9223372036854775808 to 9223372036854775807. The
|
||||
admin represents this as an ``<input type="text">`` (a single-line input).
|
||||
default form widget for this field is a :class:`~django.forms.TextInput`.
|
||||
|
||||
|
||||
``BooleanField``
|
||||
|
|
@ -347,7 +344,8 @@ admin represents this as an ``<input type="text">`` (a single-line input).
|
|||
|
||||
A true/false field.
|
||||
|
||||
The admin represents this as a checkbox.
|
||||
The default form widget for this field is a
|
||||
:class:`~django.forms.CheckboxInput`.
|
||||
|
||||
If you need to accept :attr:`~Field.null` values then use
|
||||
:class:`NullBooleanField` instead.
|
||||
|
|
@ -361,7 +359,7 @@ A string field, for small- to large-sized strings.
|
|||
|
||||
For large amounts of text, use :class:`~django.db.models.TextField`.
|
||||
|
||||
The admin represents this as an ``<input type="text">`` (a single-line input).
|
||||
The default form widget for this field is a :class:`~django.forms.TextInput`.
|
||||
|
||||
:class:`CharField` has one extra required argument:
|
||||
|
||||
|
|
@ -414,9 +412,10 @@ optional arguments:
|
|||
for creation of timestamps. Note that the current date is *always* used;
|
||||
it's not just a default value that you can override.
|
||||
|
||||
The admin represents this as an ``<input type="text">`` with a JavaScript
|
||||
calendar, and a shortcut for "Today". Includes an additional ``invalid_date``
|
||||
error message key.
|
||||
The default form widget for this field is a
|
||||
:class:`~django.forms.TextInput`. The admin adds a JavaScript calendar,
|
||||
and a shortcut for "Today". Includes an additional ``invalid_date`` error
|
||||
message key.
|
||||
|
||||
.. note::
|
||||
As currently implemented, setting ``auto_now`` or ``auto_now_add`` to
|
||||
|
|
@ -431,8 +430,9 @@ error message key.
|
|||
A date and time, represented in Python by a ``datetime.datetime`` instance.
|
||||
Takes the same extra arguments as :class:`DateField`.
|
||||
|
||||
The admin represents this as two ``<input type="text">`` fields, with
|
||||
JavaScript shortcuts.
|
||||
The default form widget for this field is a single
|
||||
:class:`~django.forms.TextInput`. The admin uses two separate
|
||||
:class:`~django.forms.TextInput` widgets with JavaScript shortcuts.
|
||||
|
||||
``DecimalField``
|
||||
----------------
|
||||
|
|
@ -461,7 +461,7 @@ decimal places::
|
|||
|
||||
models.DecimalField(..., max_digits=19, decimal_places=10)
|
||||
|
||||
The admin represents this as an ``<input type="text">`` (a single-line input).
|
||||
The default form widget for this field is a :class:`~django.forms.TextInput`.
|
||||
|
||||
.. note::
|
||||
|
||||
|
|
@ -539,8 +539,8 @@ Also has one optional argument:
|
|||
Optional. A storage object, which handles the storage and retrieval of your
|
||||
files. See :doc:`/topics/files` for details on how to provide this object.
|
||||
|
||||
The admin represents this field as an ``<input type="file">`` (a file-upload
|
||||
widget).
|
||||
The default form widget for this field is a
|
||||
:class:`~django.forms.widgets.FileInput`.
|
||||
|
||||
Using a :class:`FileField` or an :class:`ImageField` (see below) in a model
|
||||
takes a few steps:
|
||||
|
|
@ -725,7 +725,7 @@ can change the maximum length using the :attr:`~CharField.max_length` argument.
|
|||
|
||||
A floating-point number represented in Python by a ``float`` instance.
|
||||
|
||||
The admin represents this as an ``<input type="text">`` (a single-line input).
|
||||
The default form widget for this field is a :class:`~django.forms.TextInput`.
|
||||
|
||||
.. _floatfield_vs_decimalfield:
|
||||
|
||||
|
|
@ -776,16 +776,16 @@ length using the :attr:`~CharField.max_length` argument.
|
|||
|
||||
.. class:: IntegerField([**options])
|
||||
|
||||
An integer. The admin represents this as an ``<input type="text">`` (a
|
||||
single-line input).
|
||||
An integer. The default form widget for this field is a
|
||||
:class:`~django.forms.TextInput`.
|
||||
|
||||
``IPAddressField``
|
||||
------------------
|
||||
|
||||
.. class:: IPAddressField([**options])
|
||||
|
||||
An IP address, in string format (e.g. "192.0.2.30"). The admin represents this
|
||||
as an ``<input type="text">`` (a single-line input).
|
||||
An IP address, in string format (e.g. "192.0.2.30"). The default form widget
|
||||
for this field is a :class:`~django.forms.TextInput`.
|
||||
|
||||
``GenericIPAddressField``
|
||||
-------------------------
|
||||
|
|
@ -795,8 +795,8 @@ as an ``<input type="text">`` (a single-line input).
|
|||
.. versionadded:: 1.4
|
||||
|
||||
An IPv4 or IPv6 address, in string format (e.g. ``192.0.2.30`` or
|
||||
``2a02:42fe::4``). The admin represents this as an ``<input type="text">``
|
||||
(a single-line input).
|
||||
``2a02:42fe::4``). The default form widget for this field is a
|
||||
:class:`~django.forms.TextInput`.
|
||||
|
||||
The IPv6 address normalization follows :rfc:`4291#section-2.2` section 2.2,
|
||||
including using the IPv4 format suggested in paragraph 3 of that section, like
|
||||
|
|
@ -823,8 +823,8 @@ are converted to lowercase.
|
|||
.. class:: NullBooleanField([**options])
|
||||
|
||||
Like a :class:`BooleanField`, but allows ``NULL`` as one of the options. Use
|
||||
this instead of a :class:`BooleanField` with ``null=True``. The admin represents
|
||||
this as a ``<select>`` box with "Unknown", "Yes" and "No" choices.
|
||||
this instead of a :class:`BooleanField` with ``null=True``. The default form
|
||||
widget for this field is a :class:`~django.forms.NullBooleanSelect`.
|
||||
|
||||
``PositiveIntegerField``
|
||||
------------------------
|
||||
|
|
@ -875,8 +875,8 @@ Like an :class:`IntegerField`, but only allows values under a certain
|
|||
|
||||
.. class:: TextField([**options])
|
||||
|
||||
A large text field. The admin represents this as a ``<textarea>`` (a multi-line
|
||||
input).
|
||||
A large text field. The default form widget for this field is a
|
||||
:class:`~django.forms.Textarea`.
|
||||
|
||||
.. admonition:: MySQL users
|
||||
|
||||
|
|
@ -893,8 +893,8 @@ input).
|
|||
A time, represented in Python by a ``datetime.time`` instance. Accepts the same
|
||||
auto-population options as :class:`DateField`.
|
||||
|
||||
The admin represents this as an ``<input type="text">`` with some JavaScript
|
||||
shortcuts.
|
||||
The default form widget for this field is a :class:`~django.forms.TextInput`.
|
||||
The admin adds some JavaScript shortcuts.
|
||||
|
||||
``URLField``
|
||||
------------
|
||||
|
|
@ -903,7 +903,7 @@ shortcuts.
|
|||
|
||||
A :class:`CharField` for a URL.
|
||||
|
||||
The admin represents this as an ``<input type="text">`` (a single-line input).
|
||||
The default form widget for this field is a :class:`~django.forms.TextInput`.
|
||||
|
||||
Like all :class:`CharField` subclasses, :class:`URLField` takes the optional
|
||||
:attr:`~CharField.max_length`argument. If you don't specify
|
||||
|
|
@ -979,9 +979,9 @@ define the details of how the relation works.
|
|||
.. attribute:: ForeignKey.limit_choices_to
|
||||
|
||||
A dictionary of lookup arguments and values (see :doc:`/topics/db/queries`)
|
||||
that limit the available admin choices for this object. Use this with
|
||||
functions from the Python ``datetime`` module to limit choices of objects by
|
||||
date. For example::
|
||||
that limit the available admin or ModelForm choices for this object. Use
|
||||
this with functions from the Python ``datetime`` module to limit choices of
|
||||
objects by date. For example::
|
||||
|
||||
limit_choices_to = {'pub_date__lte': datetime.now}
|
||||
|
||||
|
|
|
|||
|
|
@ -48,7 +48,7 @@ that, you need to :meth:`~Model.save()`.
|
|||
2. Add a method on a custom manager (usually preferred)::
|
||||
|
||||
class BookManager(models.Manager):
|
||||
def create_book(title):
|
||||
def create_book(self, title):
|
||||
book = self.create(title=title)
|
||||
# do something with the book
|
||||
return book
|
||||
|
|
@ -459,9 +459,9 @@ using ``__str__()`` like this::
|
|||
last_name = models.CharField(max_length=50)
|
||||
|
||||
def __str__(self):
|
||||
# Note use of django.utils.encoding.smart_bytes() here because
|
||||
# Note use of django.utils.encoding.force_bytes() here because
|
||||
# first_name and last_name will be unicode strings.
|
||||
return smart_bytes('%s %s' % (self.first_name, self.last_name))
|
||||
return force_bytes('%s %s' % (self.first_name, self.last_name))
|
||||
|
||||
``get_absolute_url``
|
||||
--------------------
|
||||
|
|
|
|||
|
|
@ -2064,7 +2064,7 @@ Note this is only available in MySQL and requires direct manipulation of the
|
|||
database to add the full-text index. By default Django uses BOOLEAN MODE for
|
||||
full text searches. See the `MySQL documentation`_ for additional details.
|
||||
|
||||
.. _MySQL documentation: http://dev.mysql.com/doc/refman/5.1/en/fulltext-boolean.html>
|
||||
.. _MySQL documentation: http://dev.mysql.com/doc/refman/5.1/en/fulltext-boolean.html
|
||||
|
||||
|
||||
.. fieldlookup:: regex
|
||||
|
|
@ -2236,4 +2236,3 @@ Variance
|
|||
extension.
|
||||
|
||||
.. _SQLite documentation: http://www.sqlite.org/contrib
|
||||
|
||||
|
|
|
|||
|
|
@ -731,10 +731,11 @@ types of HTTP responses. Like ``HttpResponse``, these subclasses live in
|
|||
|
||||
.. class:: HttpResponseRedirect
|
||||
|
||||
The constructor takes a single argument -- the path to redirect to. This
|
||||
can be a fully qualified URL (e.g. ``'http://www.yahoo.com/search/'``) or
|
||||
an absolute path with no domain (e.g. ``'/search/'``). Note that this
|
||||
returns an HTTP status code 302.
|
||||
The first argument to the constructor is required -- the path to redirect
|
||||
to. This can be a fully qualified URL
|
||||
(e.g. ``'http://www.yahoo.com/search/'``) or an absolute path with no
|
||||
domain (e.g. ``'/search/'``). See :class:`HttpResponse` for other optional
|
||||
constructor arguments. Note that this returns an HTTP status code 302.
|
||||
|
||||
.. class:: HttpResponsePermanentRedirect
|
||||
|
||||
|
|
@ -743,8 +744,9 @@ types of HTTP responses. Like ``HttpResponse``, these subclasses live in
|
|||
|
||||
.. class:: HttpResponseNotModified
|
||||
|
||||
The constructor doesn't take any arguments. Use this to designate that a
|
||||
page hasn't been modified since the user's last request (status code 304).
|
||||
The constructor doesn't take any arguments and no content should be added
|
||||
to this response. Use this to designate that a page hasn't been modified
|
||||
since the user's last request (status code 304).
|
||||
|
||||
.. class:: HttpResponseBadRequest
|
||||
|
||||
|
|
@ -760,8 +762,9 @@ types of HTTP responses. Like ``HttpResponse``, these subclasses live in
|
|||
|
||||
.. class:: HttpResponseNotAllowed
|
||||
|
||||
Like :class:`HttpResponse`, but uses a 405 status code. Takes a single,
|
||||
required argument: a list of permitted methods (e.g. ``['GET', 'POST']``).
|
||||
Like :class:`HttpResponse`, but uses a 405 status code. The first argument
|
||||
to the constructor is required: a list of permitted methods (e.g.
|
||||
``['GET', 'POST']``).
|
||||
|
||||
.. class:: HttpResponseGone
|
||||
|
||||
|
|
|
|||
|
|
@ -192,7 +192,7 @@ compose a prefix, version and key into a final cache key. The default
|
|||
implementation is equivalent to the function::
|
||||
|
||||
def make_key(key, key_prefix, version):
|
||||
return ':'.join([key_prefix, str(version), smart_bytes(key)])
|
||||
return ':'.join([key_prefix, str(version), key])
|
||||
|
||||
You may use any key function you want, as long as it has the same
|
||||
argument signature.
|
||||
|
|
@ -1375,8 +1375,8 @@ MEDIA_ROOT
|
|||
|
||||
Default: ``''`` (Empty string)
|
||||
|
||||
Absolute path to the directory that holds media for this installation, used
|
||||
for :doc:`managing stored files </topics/files>`.
|
||||
Absolute filesystem path to the directory that will hold :doc:`user-uploaded
|
||||
files </topics/files>`.
|
||||
|
||||
Example: ``"/var/www/example.com/media/"``
|
||||
|
||||
|
|
|
|||
|
|
@ -125,6 +125,10 @@ dot in a variable name, it tries the following lookups, in this order:
|
|||
* Attribute lookup. Example: ``foo.bar``
|
||||
* List-index lookup. Example: ``foo[bar]``
|
||||
|
||||
Note that "bar" in a template expression like ``{{ foo.bar }}`` will be
|
||||
interpreted as a literal string and not using the value of the variable "bar",
|
||||
if one exists in the template context.
|
||||
|
||||
The template system uses the first lookup type that works. It's short-circuit
|
||||
logic. Here are a few examples::
|
||||
|
||||
|
|
@ -424,6 +428,10 @@ optional, third positional argument, ``processors``. In this example, the
|
|||
my_data_dictionary,
|
||||
context_instance=RequestContext(request))
|
||||
|
||||
Alternatively, use the :meth:`~django.shortcuts.render()` shortcut which is
|
||||
the same as a call to :func:`~django.shortcuts.render_to_response()` with a
|
||||
context_instance argument that forces the use of a ``RequestContext``.
|
||||
|
||||
Here's what each of the default processors does:
|
||||
|
||||
django.contrib.auth.context_processors.auth
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue