summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVlastimil Zíma <vlastimil.zima@nic.cz>2017-08-25 11:47:59 +0200
committerTim Graham <timograham@gmail.com>2018-08-06 17:03:06 -0400
commita9f5652113f0721a7066e359ae28d14692ea3c47 (patch)
tree74cf27a6a93f3114d7360b2126a487e2256febbb
parent93bd860710d9914cc077ee362d5f3647489ce5a5 (diff)
Fixed #28529 -- Fixed VariableDoesNotExist warnings in admin templates.
-rw-r--r--django/contrib/admin/sites.py3
-rw-r--r--django/contrib/admin/templates/admin/change_list.html6
-rw-r--r--django/contrib/admin/templates/admin/change_list_results.html2
-rw-r--r--django/contrib/admin/templates/admin/edit_inline/stacked.html2
-rw-r--r--django/contrib/admin/templates/admin/edit_inline/tabular.html6
-rw-r--r--django/contrib/admin/templates/admin/submit_line.html2
-rw-r--r--django/contrib/admin/templatetags/admin_list.py1
-rw-r--r--django/contrib/admin/views/main.py1
-rw-r--r--django/contrib/admin/widgets.py4
-rw-r--r--docs/ref/templates/api.txt6
10 files changed, 21 insertions, 12 deletions
diff --git a/django/contrib/admin/sites.py b/django/contrib/admin/sites.py
index 0dafe9766b..6842f49684 100644
--- a/django/contrib/admin/sites.py
+++ b/django/contrib/admin/sites.py
@@ -300,6 +300,7 @@ class AdminSite:
'site_url': site_url,
'has_permission': self.has_permission(request),
'available_apps': self.get_app_list(request),
+ 'is_popup': False,
}
def password_change(self, request, extra_context=None):
@@ -431,6 +432,8 @@ class AdminSite:
'name': capfirst(model._meta.verbose_name_plural),
'object_name': model._meta.object_name,
'perms': perms,
+ 'admin_url': None,
+ 'add_url': None,
}
if perms.get('change') or perms.get('view'):
model_dict['view_only'] = not perms.get('change')
diff --git a/django/contrib/admin/templates/admin/change_list.html b/django/contrib/admin/templates/admin/change_list.html
index 0ffca672c0..768e581d1e 100644
--- a/django/contrib/admin/templates/admin/change_list.html
+++ b/django/contrib/admin/templates/admin/change_list.html
@@ -46,7 +46,7 @@
{% endblock %}
</ul>
{% endblock %}
- {% if cl.formset.errors %}
+ {% if cl.formset and cl.formset.errors %}
<p class="errornote">
{% if cl.formset.total_error_count == 1 %}{% trans "Please correct the error below." %}{% else %}{% trans "Please correct the errors below." %}{% endif %}
</p>
@@ -54,7 +54,7 @@
{% endif %}
<div class="module{% if cl.has_filters %} filtered{% endif %}" id="changelist">
{% block search %}{% search_form cl %}{% endblock %}
- {% block date_hierarchy %}{% date_hierarchy cl %}{% endblock %}
+ {% block date_hierarchy %}{% if cl.date_hierarchy %}{% date_hierarchy cl %}{% endif %}{% endblock %}
{% block filters %}
{% if cl.has_filters %}
@@ -65,7 +65,7 @@
{% endif %}
{% endblock %}
- <form id="changelist-form" method="post"{% if cl.formset.is_multipart %} enctype="multipart/form-data"{% endif %} novalidate>{% csrf_token %}
+ <form id="changelist-form" method="post"{% if cl.formset and cl.formset.is_multipart %} enctype="multipart/form-data"{% endif %} novalidate>{% csrf_token %}
{% if cl.formset %}
<div>{{ cl.formset.management_form }}</div>
{% endif %}
diff --git a/django/contrib/admin/templates/admin/change_list_results.html b/django/contrib/admin/templates/admin/change_list_results.html
index b3d7dd01d3..9b97b5b4f7 100644
--- a/django/contrib/admin/templates/admin/change_list_results.html
+++ b/django/contrib/admin/templates/admin/change_list_results.html
@@ -27,7 +27,7 @@
</thead>
<tbody>
{% for result in results %}
-{% if result.form.non_field_errors %}
+{% if result.form and result.form.non_field_errors %}
<tr><td colspan="{{ result|length }}">{{ result.form.non_field_errors }}</td></tr>
{% endif %}
<tr class="{% cycle 'row1' 'row2' %}">{% for item in result %}{{ item }}{% endfor %}</tr>
diff --git a/django/contrib/admin/templates/admin/edit_inline/stacked.html b/django/contrib/admin/templates/admin/edit_inline/stacked.html
index 507f69bc56..8af4d54791 100644
--- a/django/contrib/admin/templates/admin/edit_inline/stacked.html
+++ b/django/contrib/admin/templates/admin/edit_inline/stacked.html
@@ -19,7 +19,7 @@
{% include "admin/includes/fieldset.html" %}
{% endfor %}
{% if inline_admin_form.needs_explicit_pk_field %}{{ inline_admin_form.pk_field.field }}{% endif %}
- {{ inline_admin_form.fk_field.field }}
+ {% if inline_admin_form.fk_field %}{{ inline_admin_form.fk_field.field }}{% endif %}
</div>{% endfor %}
</fieldset>
</div>
diff --git a/django/contrib/admin/templates/admin/edit_inline/tabular.html b/django/contrib/admin/templates/admin/edit_inline/tabular.html
index 2584745ef9..2395d1cb6d 100644
--- a/django/contrib/admin/templates/admin/edit_inline/tabular.html
+++ b/django/contrib/admin/templates/admin/edit_inline/tabular.html
@@ -36,12 +36,12 @@
{% if inline_admin_form.show_url %}<a href="{{ inline_admin_form.absolute_url }}">{% trans "View on site" %}</a>{% endif %}
</p>{% endif %}
{% if inline_admin_form.needs_explicit_pk_field %}{{ inline_admin_form.pk_field.field }}{% endif %}
- {{ inline_admin_form.fk_field.field }}
+ {% if inline_admin_form.fk_field %}{{ inline_admin_form.fk_field.field }}{% endif %}
{% spaceless %}
{% for fieldset in inline_admin_form %}
{% for line in fieldset %}
{% for field in line %}
- {% if field.field.is_hidden %} {{ field.field }} {% endif %}
+ {% if not field.is_readonly and field.field.is_hidden %}{{ field.field }}{% endif %}
{% endfor %}
{% endfor %}
{% endfor %}
@@ -50,7 +50,7 @@
{% for fieldset in inline_admin_form %}
{% for line in fieldset %}
{% for field in line %}
- {% if not field.field.is_hidden %}
+ {% if field.is_readonly or not field.field.is_hidden %}
<td{% if field.field.name %} class="field-{{ field.field.name }}"{% endif %}>
{% if field.is_readonly %}
<p>{{ field.contents }}</p>
diff --git a/django/contrib/admin/templates/admin/submit_line.html b/django/contrib/admin/templates/admin/submit_line.html
index b9467e82b7..bb283fe9e0 100644
--- a/django/contrib/admin/templates/admin/submit_line.html
+++ b/django/contrib/admin/templates/admin/submit_line.html
@@ -2,7 +2,7 @@
<div class="submit-row">
{% block submit-row %}
{% if show_save %}<input type="submit" value="{% trans 'Save' %}" class="default" name="_save">{% endif %}
-{% if show_delete_link %}
+{% if show_delete_link and original %}
{% url opts|admin_urlname:'delete' original.pk|admin_urlquote as delete_url %}
<p class="deletelink-box"><a href="{% add_preserved_filters delete_url %}" class="deletelink">{% trans "Delete" %}</a></p>
{% endif %}
diff --git a/django/contrib/admin/templatetags/admin_list.py b/django/contrib/admin/templatetags/admin_list.py
index 22dec6994f..0211452d17 100644
--- a/django/contrib/admin/templatetags/admin_list.py
+++ b/django/contrib/admin/templatetags/admin_list.py
@@ -418,6 +418,7 @@ def date_hierarchy(cl):
years = getattr(cl.queryset, 'dates')(field_name, 'year')
return {
'show': True,
+ 'back': None,
'choices': [{
'link': link({year_field: str(year.year)}),
'title': str(year.year),
diff --git a/django/contrib/admin/views/main.py b/django/contrib/admin/views/main.py
index 3febd42fb9..2f5616f4bd 100644
--- a/django/contrib/admin/views/main.py
+++ b/django/contrib/admin/views/main.py
@@ -46,6 +46,7 @@ class ChangeList:
self.list_display = list_display
self.list_display_links = list_display_links
self.list_filter = list_filter
+ self.has_filters = None
self.date_hierarchy = date_hierarchy
self.search_fields = search_fields
self.list_select_related = list_select_related
diff --git a/django/contrib/admin/widgets.py b/django/contrib/admin/widgets.py
index 5bf54da7d6..835e653ba6 100644
--- a/django/contrib/admin/widgets.py
+++ b/django/contrib/admin/widgets.py
@@ -154,8 +154,12 @@ class ForeignKeyRawIdWidget(forms.TextInput):
context['link_title'] = _('Lookup')
# The JavaScript code looks for this class.
context['widget']['attrs'].setdefault('class', 'vForeignKeyRawIdAdminField')
+ else:
+ context['related_url'] = None
if context['widget']['value']:
context['link_label'], context['link_url'] = self.label_and_url_for_value(value)
+ else:
+ context['link_label'] = None
return context
def base_url_parameters(self):
diff --git a/docs/ref/templates/api.txt b/docs/ref/templates/api.txt
index c1a1754b29..f37c0a65c2 100644
--- a/docs/ref/templates/api.txt
+++ b/docs/ref/templates/api.txt
@@ -371,9 +371,9 @@ replaced with the name of the invalid variable.
While ``string_if_invalid`` can be a useful debugging tool, it is a bad
idea to turn it on as a 'development default'.
- Many templates, including those in the Admin site, rely upon the silence
- of the template system when a nonexistent variable is encountered. If you
- assign a value other than ``''`` to ``string_if_invalid``, you will
+ Many templates, including some of the Django's templates, rely upon the
+ silence of the template system when a nonexistent variable is encountered.
+ If you assign a value other than ``''`` to ``string_if_invalid``, you will
experience rendering problems with these templates and sites.
Generally, ``string_if_invalid`` should only be enabled in order to debug