Ticket #15294: 15294.13.diff
File 15294.13.diff, 50.5 KB (added by , 13 years ago) |
---|
-
django/contrib/admin/options.py
diff --git a/django/contrib/admin/options.py b/django/contrib/admin/options.py index cf7ea83..620dbf0 100644
a b from django.contrib import messages 11 11 from django.views.decorators.csrf import csrf_protect 12 12 from django.core.exceptions import PermissionDenied, ValidationError 13 13 from django.core.paginator import Paginator 14 from django.core.urlresolvers import reverse 14 15 from django.db import models, transaction, router 15 16 from django.db.models.related import RelatedObject 16 17 from django.db.models.fields import BLANK_CHOICE_DASH, FieldDoesNotExist … … class ModelAdmin(BaseModelAdmin): 775 776 # redirect to the change-list page for this object. Otherwise, 776 777 # redirect to the admin index. 777 778 if self.has_change_permission(request, None): 778 post_url = '../' 779 post_url = reverse('admin:%s_%s_changelist' % 780 (opts.app_label, opts.module_name), 781 current_app=self.admin_site.name) 779 782 else: 780 post_url = '../../../' 783 post_url = reverse('admin:index', 784 current_app=self.admin_site.name) 781 785 return HttpResponseRedirect(post_url) 782 786 783 787 def response_change(self, request, obj): … … class ModelAdmin(BaseModelAdmin): 786 790 """ 787 791 opts = obj._meta 788 792 789 # Handle proxy models automatically created by .only() or .defer() 793 # Handle proxy models automatically created by .only() or .defer(). 794 # Refs #14529 790 795 verbose_name = opts.verbose_name 796 module_name = opts.module_name 791 797 if obj._deferred: 792 798 opts_ = opts.proxy_for_model._meta 793 799 verbose_name = opts_.verbose_name 800 module_name = opts_.module_name 794 801 795 802 pk_value = obj._get_pk_val() 796 803 … … class ModelAdmin(BaseModelAdmin): 804 811 elif "_saveasnew" in request.POST: 805 812 msg = _('The %(name)s "%(obj)s" was added successfully. You may edit it again below.') % {'name': force_unicode(verbose_name), 'obj': obj} 806 813 self.message_user(request, msg) 807 return HttpResponseRedirect("../%s/" % pk_value) 814 return HttpResponseRedirect(reverse('admin:%s_%s_change' % 815 (opts.app_label, module_name), 816 args=(pk_value,), 817 current_app=self.admin_site.name)) 808 818 elif "_addanother" in request.POST: 809 819 self.message_user(request, msg + ' ' + (_("You may add another %s below.") % force_unicode(verbose_name))) 810 return HttpResponseRedirect("../add/") 820 return HttpResponseRedirect(reverse('admin:%s_%s_add' % 821 (opts.app_label, module_name), 822 current_app=self.admin_site.name)) 811 823 else: 812 824 self.message_user(request, msg) 813 825 # Figure out where to redirect. If the user has change permission, 814 826 # redirect to the change-list page for this object. Otherwise, 815 827 # redirect to the admin index. 816 828 if self.has_change_permission(request, None): 817 return HttpResponseRedirect('../') 829 post_url = reverse('admin:%s_%s_changelist' % 830 (opts.app_label, module_name), 831 current_app=self.admin_site.name) 818 832 else: 819 return HttpResponseRedirect('../../../') 833 post_url = reverse('admin:index', 834 current_app=self.admin_site.name) 835 return HttpResponseRedirect(post_url) 820 836 821 837 def response_action(self, request, queryset): 822 838 """ … … class ModelAdmin(BaseModelAdmin): 989 1005 raise Http404(_('%(name)s object with primary key %(key)r does not exist.') % {'name': force_unicode(opts.verbose_name), 'key': escape(object_id)}) 990 1006 991 1007 if request.method == 'POST' and "_saveasnew" in request.POST: 992 return self.add_view(request, form_url='../add/') 1008 return self.add_view(request, form_url=reverse('admin:%s_%s_add' % 1009 (opts.app_label, opts.module_name), 1010 current_app=self.admin_site.name)) 993 1011 994 1012 ModelForm = self.get_form(request, obj) 995 1013 formsets = [] … … class ModelAdmin(BaseModelAdmin): 1245 1263 self.message_user(request, _('The %(name)s "%(obj)s" was deleted successfully.') % {'name': force_unicode(opts.verbose_name), 'obj': force_unicode(obj_display)}) 1246 1264 1247 1265 if not self.has_change_permission(request, None): 1248 return HttpResponseRedirect("../../../../") 1249 return HttpResponseRedirect("../../") 1266 return HttpResponseRedirect(reverse('admin:index', 1267 current_app=self.admin_site.name)) 1268 return HttpResponseRedirect(reverse('admin:%s_%s_changelist' % 1269 (opts.app_label, opts.module_name), 1270 current_app=self.admin_site.name)) 1250 1271 1251 1272 object_name = force_unicode(opts.verbose_name) 1252 1273 … … class ModelAdmin(BaseModelAdmin): 1291 1312 'module_name': capfirst(force_unicode(opts.verbose_name_plural)), 1292 1313 'object': obj, 1293 1314 'app_label': app_label, 1315 'opts': opts, 1294 1316 } 1295 1317 context.update(extra_context or {}) 1296 1318 return TemplateResponse(request, self.object_history_template or [ -
django/contrib/admin/sites.py
diff --git a/django/contrib/admin/sites.py b/django/contrib/admin/sites.py index 49c1e78..3ba9314 100644
a b class AdminSite(object): 339 339 # Check whether user has any perm for this module. 340 340 # If so, add the module to the model_list. 341 341 if True in perms.values(): 342 info = (app_label, model._meta.module_name) 342 343 model_dict = { 343 344 'name': capfirst(model._meta.verbose_name_plural), 344 'admin_url': mark_safe('%s/%s/' % (app_label, model.__name__.lower())), 345 'admin_url': reverse('admin:%s_%s_changelist' % info, current_app=self.name), 346 'add_url': reverse('admin:%s_%s_add' % info, current_app=self.name), 345 347 'perms': perms, 346 348 } 347 349 if app_label in app_dict: … … class AdminSite(object): 349 351 else: 350 352 app_dict[app_label] = { 351 353 'name': app_label.title(), 352 'app_url': app_label + '/',354 'app_url': reverse('admin:app_list', kwargs={'app_label': app_label}, current_app=self.name), 353 355 'has_module_perms': has_module_perms, 354 356 'models': [model_dict], 355 357 } … … class AdminSite(object): 383 385 # Check whether user has any perm for this module. 384 386 # If so, add the module to the model_list. 385 387 if True in perms.values(): 388 info = (app_label, model._meta.module_name) 386 389 model_dict = { 387 390 'name': capfirst(model._meta.verbose_name_plural), 388 'admin_url': '%s/' % model.__name__.lower(), 391 'admin_url': reverse('admin:%s_%s_changelist' % info, current_app=self.name), 392 'add_url': reverse('admin:%s_%s_add' % info, current_app=self.name), 389 393 'perms': perms, 390 394 } 391 395 if app_dict: -
django/contrib/admin/templates/admin/500.html
diff --git a/django/contrib/admin/templates/admin/500.html b/django/contrib/admin/templates/admin/500.html index b30e431..eeb9e8d 100644
a b 1 1 {% extends "admin/base_site.html" %} 2 2 {% load i18n %} 3 {% load url from future %} 3 4 4 {% block breadcrumbs %}<div class="breadcrumbs"><a href="/">{% trans "Home" %}</a> › {% trans "Server error" %}</div>{% endblock %} 5 {% block breadcrumbs %} 6 <div class="breadcrumbs"> 7 <a href="{% url 'admin:index' %}">{% trans 'Home' %}</a> 8 › {% trans 'Server error' %} 9 </div> 10 {% endblock %} 5 11 6 12 {% block title %}{% trans 'Server error (500)' %}{% endblock %} 7 13 -
django/contrib/admin/templates/admin/app_index.html
diff --git a/django/contrib/admin/templates/admin/app_index.html b/django/contrib/admin/templates/admin/app_index.html index 120433d..4616b16 100644
a b 1 {% extends "admin/index.html" %} 2 {% load i18n %} 1 {% extends "admin/index.html" %} 2 {% load i18n %} 3 {% load url from future %} 3 4 4 5 {% if not is_popup %} 5 6 6 {% block breadcrumbs %} 7 <div class="breadcrumbs"><a href="../"> 8 {% trans "Home" %}</a> › 7 <div class="breadcrumbs"> 8 <a href="{% url 'admin:index' %}">{% trans 'Home' %}</a> 9 › 9 10 {% for app in app_list %} 10 11 {% blocktrans with app.name as name %}{{ name }}{% endblocktrans %} 11 {% endfor %}</div>{% endblock %} 12 13 {% endif %} 12 {% endfor %} 13 </div> 14 {% endblock %} 15 {% endif %} 14 16 15 {% block sidebar %}{% endblock %} 16 No newline at end of file 17 {% block sidebar %}{% endblock %} -
django/contrib/admin/templates/admin/auth/user/change_password.html
diff --git a/django/contrib/admin/templates/admin/auth/user/change_password.html b/django/contrib/admin/templates/admin/auth/user/change_password.html index b18b0aa..32dbcd9 100644
a b 1 1 {% extends "admin/base_site.html" %} 2 2 {% load i18n admin_static admin_modify %} 3 3 {% load url from future %} 4 {% load admin_urls %} 5 4 6 {% block extrahead %}{{ block.super }} 5 7 {% url 'admin:jsi18n' as jsi18nurl %} 6 8 <script type="text/javascript" src="{{ jsi18nurl|default:"../../../../jsi18n/" }}"></script> 7 9 {% endblock %} 8 10 {% block extrastyle %}{{ block.super }}<link rel="stylesheet" type="text/css" href="{% static "admin/css/forms.css" %}" />{% endblock %} 9 11 {% block bodyclass %}{{ opts.app_label }}-{{ opts.object_name.lower }} change-form{% endblock %} 10 {% block breadcrumbs %}{%if not is_popup %}11 <div class="breadcrumbs"> 12 <a href="../../../../">{% trans "Home" %}</a> › 13 <a href="../../../">{{ opts.app_label|capfirst|escape }}</a> › 14 <a href="../../">{{ opts.verbose_name_plural|capfirst }}</a> › 15 <a href="../">{{ original|truncatewords:"18" }}</a> › 16 12 {% if not is_popup %} 13 {% block breadcrumbs %} 14 <a href="{% url 'admin:index' %}">{% trans 'Home' %}</a> 15 › <a href="{% url 'admin:app_list' app_label=opts.app_label %}">{{ opts.app_label|capfirst|escape }}</a> 16 › <a href="{% url opts|admin_url:'changelist' %}">{{ opts.verbose_name_plural|capfirst }}</a> 17 › <a href="{% url opts|admin_url:'changelist' %}{{ original.pk }}">{{ original|truncatewords:"18" }}</a> 18 › {% trans 'Change password' %} 17 19 </div> 18 {% endif %}{% endblock %} 20 {% endblock %} 21 {% endif %} 19 22 {% block content %}<div id="content-main"> 20 23 <form action="{{ form_url }}" method="post" id="{{ opts.module_name }}_form">{% csrf_token %}{% block form_top %}{% endblock %} 21 24 <div> -
django/contrib/admin/templates/admin/base.html
diff --git a/django/contrib/admin/templates/admin/base.html b/django/contrib/admin/templates/admin/base.html index 4b3c429..3b50adc 100644
a b 32 32 {% if docsroot %} 33 33 <a href="{{ docsroot }}">{% trans 'Documentation' %}</a> / 34 34 {% endif %} 35 <a href="{% url 'admin:password_change' %}"> 36 {% trans 'Change password' %}</a> / 37 <a href="{% url 'admin:logout' %}"> 38 {% trans 'Log out' %}</a> 35 <a href="{% url 'admin:password_change' %}">{% trans 'Change password' %}</a> / 36 <a href="{% url 'admin:logout' %}">{% trans 'Log out' %}</a> 39 37 {% endblock %} 40 38 </div> 41 39 {% endif %} 42 40 {% block nav-global %}{% endblock %} 43 41 </div> 44 42 <!-- END Header --> 45 {% block breadcrumbs %}<div class="breadcrumbs"><a href="/">{% trans 'Home' %}</a>{% if title %} › {{ title }}{% endif %}</div>{% endblock %} 43 {% block breadcrumbs %} 44 <div class="breadcrumbs"> 45 <a href="{% url 'admin:index' %}">{% trans 'Home' %}</a> 46 {% if title %} › {{ title }}{% endif %} 47 </div> 48 {% endblock %} 46 49 {% endif %} 47 50 48 51 {% block messages %} -
django/contrib/admin/templates/admin/change_form.html
diff --git a/django/contrib/admin/templates/admin/change_form.html b/django/contrib/admin/templates/admin/change_form.html index 56661e9..71230e4 100644
a b 1 1 {% extends "admin/base_site.html" %} 2 2 {% load i18n admin_static admin_modify %} 3 3 {% load url from future %} 4 {% load admin_urls %} 4 5 5 6 {% block extrahead %}{{ block.super }} 6 7 {% url 'admin:jsi18n' as jsi18nurl %} … … 14 15 15 16 {% block bodyclass %}{{ opts.app_label }}-{{ opts.object_name.lower }} change-form{% endblock %} 16 17 17 {% block breadcrumbs %}{%if not is_popup %}18 <div class="breadcrumbs"> 19 <a href="../../../">{% trans "Home" %}</a> › 20 <a href="../../">{{ app_label|capfirst|escape }}</a> › 21 {% if has_change_permission %}<a href="../">{{ opts.verbose_name_plural|capfirst }}</a>{% else %}{{ opts.verbose_name_plural|capfirst }}{% endif %} › 22 {% if add %}{% trans "Add"%} {{ opts.verbose_name }}{% else %}{{ original|truncatewords:"18" }}{% endif %}18 {% if not is_popup %} 19 {% block breadcrumbs %} 20 <a href="{% url 'admin:index' %}">{% trans 'Home' %}</a> 21 › <a href="{% url 'admin:app_list' app_label=opts.app_label %}">{{ app_label|capfirst|escape }}</a> 22 › {% if has_change_permission %}<a href="{% url opts|admin_url:'changelist' %}">{{ opts.verbose_name_plural|capfirst }}</a>{% else %}{{ opts.verbose_name_plural|capfirst }}{% endif %} 23 › {% if add %}{% trans 'Add' %} {{ opts.verbose_name }}{% else %}{{ original|truncatewords:"18" }}{% endif %} 23 24 </div> 24 {% endif %}{% endblock %} 25 {% endblock %} 26 {% endif %} 25 27 26 28 {% block content %}<div id="content-main"> 27 29 {% block object-tools %} -
django/contrib/admin/templates/admin/change_list.html
diff --git a/django/contrib/admin/templates/admin/change_list.html b/django/contrib/admin/templates/admin/change_list.html index 24c6d8c..6a92496 100644
a b 1 1 {% extends "admin/base_site.html" %} 2 2 {% load i18n admin_static admin_list %} 3 3 {% load url from future %} 4 {% load admin_urls %} 5 4 6 {% block extrastyle %} 5 7 {{ block.super }} 6 8 <link rel="stylesheet" type="text/css" href="{% static "admin/css/changelists.css" %}" /> … … 36 38 {% block bodyclass %}change-list{% endblock %} 37 39 38 40 {% if not is_popup %} 39 {% block breadcrumbs %} 40 <div class="breadcrumbs"> 41 <a href="../../"> 42 {% trans "Home" %} 43 </a> 44 › 45 <a href="../"> 46 {{ app_label|capfirst }} 47 </a> 48 › 49 {{ cl.opts.verbose_name_plural|capfirst }} 50 </div> 51 {% endblock %} 41 {% block breadcrumbs %} 42 <div class="breadcrumbs"> 43 <a href="{% url 'admin:index' %}">{% trans 'Home' %}</a> 44 › <a href="{% url 'admin:app_list' app_label=cl.opts.app_label %}">{{ app_label|capfirst|escape }}</a> 45 › {{ cl.opts.verbose_name_plural|capfirst }} 46 </div> 47 {% endblock %} 52 48 {% endif %} 53 49 54 50 {% block coltype %}flex{% endblock %} … … 60 56 <ul class="object-tools"> 61 57 {% block object-tools-items %} 62 58 <li> 63 <a href=" add/{% if is_popup %}?_popup=1{% endif %}" class="addlink">59 <a href="{% url cl.opts|admin_url:'add' %}{% if is_popup %}?_popup=1{% endif %}" class="addlink"> 64 60 {% blocktrans with cl.opts.verbose_name as name %}Add {{ name }}{% endblocktrans %} 65 61 </a> 66 62 </li> -
django/contrib/admin/templates/admin/delete_confirmation.html
diff --git a/django/contrib/admin/templates/admin/delete_confirmation.html b/django/contrib/admin/templates/admin/delete_confirmation.html index 0e6d47e..a4acb95 100644
a b 1 1 {% extends "admin/base_site.html" %} 2 2 {% load i18n %} 3 {% load url from future %} 4 {% load admin_urls %} 3 5 4 6 {% block breadcrumbs %} 5 7 <div class="breadcrumbs"> 6 <a href="../../../../">{% trans "Home" %}</a> › 7 <a href="../../../">{{ app_label|capfirst }}</a> › 8 <a href="../../">{{ opts.verbose_name_plural|capfirst }}</a> › 9 <a href="../">{{ object|truncatewords:"18" }}</a> › 10 8 <a href="{% url 'admin:index' %}">{% trans 'Home' %}</a> 9 › <a href="{% url 'admin:app_list' app_label=opts.app_label %}">{{ app_label|capfirst }}</a> 10 › <a href="{% url opts|admin_url:'changelist' %}">{{ opts.verbose_name_plural|capfirst|escape }}</a> 11 › <a href="{% url opts|admin_url:'changelist' %}{{ object.pk }}">{{ object|truncatewords:"18" }}</a> 12 › {% trans 'Delete' %} 11 13 </div> 12 14 {% endblock %} 13 15 -
django/contrib/admin/templates/admin/delete_selected_confirmation.html
diff --git a/django/contrib/admin/templates/admin/delete_selected_confirmation.html b/django/contrib/admin/templates/admin/delete_selected_confirmation.html index 127519b..04a2ae7 100644
a b 1 1 {% extends "admin/base_site.html" %} 2 2 {% load i18n l10n %} 3 {% load url from future %} 4 {% load admin_urls %} 3 5 4 6 {% block breadcrumbs %} 5 7 <div class="breadcrumbs"> 6 <a href="../../">{% trans "Home" %}</a> › 7 <a href="../">{{ app_label|capfirst }}</a> › 8 <a href="./">{{ opts.verbose_name_plural|capfirst }}</a> › 9 8 <a href="{% url 'admin:index' %}">{% trans 'Home' %}</a> 9 › <a href="{% url 'admin:app_list' app_label=app_label %}">{{ app_label|capfirst|escape }}</a> 10 › <a href="{% url opts|admin_url:'changelist' %}">{{ opts.verbose_name_plural|capfirst }}</a> 11 › {% trans 'Delete multiple objects' %} 10 12 </div> 11 13 {% endblock %} 12 14 -
django/contrib/admin/templates/admin/index.html
diff --git a/django/contrib/admin/templates/admin/index.html b/django/contrib/admin/templates/admin/index.html index 7164220..86c795b 100644
a b 26 26 {% endif %} 27 27 28 28 {% if model.perms.add %} 29 <td><a href="{{ model.ad min_url }}add/" class="addlink">{% trans 'Add' %}</a></td>29 <td><a href="{{ model.add_url }}" class="addlink">{% trans 'Add' %}</a></td> 30 30 {% else %} 31 31 <td> </td> 32 32 {% endif %} -
django/contrib/admin/templates/admin/invalid_setup.html
diff --git a/django/contrib/admin/templates/admin/invalid_setup.html b/django/contrib/admin/templates/admin/invalid_setup.html index f09b316..c2df4df 100644
a b 1 1 {% extends "admin/base_site.html" %} 2 2 {% load i18n %} 3 {% load url from future %} 3 4 4 {% block breadcrumbs %}<div class="breadcrumbs"><a href="../../">{% trans 'Home' %}</a> › {{ title }}</div>{% endblock %} 5 {% block breadcrumbs %} 6 <div class="breadcrumbs"> 7 <a href="{% url 'admin:index' %}">{% trans 'Home' %}</a> 8 › {{ title }} 9 </div> 10 {% endblock %} 5 11 6 12 {% block content %} 7 13 <p>{% trans "Something's wrong with your database installation. Make sure the appropriate database tables have been created, and make sure the database is readable by the appropriate user." %}</p> -
django/contrib/admin/templates/admin/object_history.html
diff --git a/django/contrib/admin/templates/admin/object_history.html b/django/contrib/admin/templates/admin/object_history.html index 5ae7847..e39471b 100644
a b 1 1 {% extends "admin/base_site.html" %} 2 2 {% load i18n %} 3 {% load url from future %} 4 {% load admin_urls %} 3 5 4 6 {% block breadcrumbs %} 5 7 <div class="breadcrumbs"> 6 <a href="../../../../">{% trans 'Home' %}</a> › 7 <a href="../../../">{{ app_label|capfirst }}</a> › 8 <a href="../../">{{ module_name }}</a> › 9 <a href="../">{{ object|truncatewords:"18" }}</a> › 10 8 <a href="{% url 'admin:index' %}">{% trans 'Home' %}</a> 9 › <a href="{% url 'admin:app_list' app_label=app_label %}">{{ app_label|capfirst|escape }}</a> 10 › <a href="{% url opts|admin_url:'changelist' %}">{{ module_name }}</a> 11 › <a href="{% url opts|admin_url:'changelist' %}{{ object.pk }}">{{ object|truncatewords:"18" }}</a> 12 › {% trans 'History' %} 11 13 </div> 12 14 {% endblock %} 13 15 -
django/contrib/admin/templates/registration/logged_out.html
diff --git a/django/contrib/admin/templates/registration/logged_out.html b/django/contrib/admin/templates/registration/logged_out.html index d339ef0..e95d864 100644
a b 1 1 {% extends "admin/base_site.html" %} 2 2 {% load i18n %} 3 {% load url from future %} 3 4 4 {% block breadcrumbs %}<div class="breadcrumbs"><a href=" ../">{% trans 'Home' %}</a></div>{% endblock %}5 {% block breadcrumbs %}<div class="breadcrumbs"><a href="{% url 'admin:index' %}">{% trans 'Home' %}</a></div>{% endblock %} 5 6 6 7 {% block content %} 7 8 8 9 <p>{% trans "Thanks for spending some quality time with the Web site today." %}</p> 9 10 10 <p><a href=" ../">{% trans 'Log in again' %}</a></p>11 <p><a href="{% url 'admin:index' %}">{% trans 'Log in again' %}</a></p> 11 12 12 13 {% endblock %} -
django/contrib/admin/templates/registration/password_change_done.html
diff --git a/django/contrib/admin/templates/registration/password_change_done.html b/django/contrib/admin/templates/registration/password_change_done.html index 0c0690d..863fc96 100644
a b 1 1 {% extends "admin/base_site.html" %} 2 2 {% load i18n %} 3 3 {% load url from future %} 4 {% block userlinks %}{% url 'django-admindocs-docroot' as docsroot %}{% if docsroot %}<a href="{{ docsroot }}">{% trans 'Documentation' %}</a> / {% endif %}{% trans 'Change password' %} / <a href="../../logout/">{% trans 'Log out' %}</a>{% endblock %} 5 {% block breadcrumbs %}<div class="breadcrumbs"><a href="../../">{% trans 'Home' %}</a> › {% trans 'Password change' %}</div>{% endblock %} 4 {% block userlinks %}{% url 'django-admindocs-docroot' as docsroot %}{% if docsroot %}<a href="{{ docsroot }}">{% trans 'Documentation' %}</a> / {% endif %}{% trans 'Change password' %} / <a href="{% url 'admin:logout' %}">{% trans 'Log out' %}</a>{% endblock %} 5 {% block breadcrumbs %} 6 <div class="breadcrumbs"> 7 <a href="{% url 'admin:index' %}">{% trans 'Home' %}</a> 8 › {% trans 'Password change' %} 9 </div> 10 {% endblock %} 6 11 7 12 {% block title %}{% trans 'Password change successful' %}{% endblock %} 8 13 -
django/contrib/admin/templates/registration/password_change_form.html
diff --git a/django/contrib/admin/templates/registration/password_change_form.html b/django/contrib/admin/templates/registration/password_change_form.html index f76692d..0e4ea53 100644
a b 2 2 {% load i18n static %} 3 3 {% load url from future %} 4 4 {% block extrastyle %}{{ block.super }}<link rel="stylesheet" type="text/css" href="{% static "admin/css/forms.css" %}" />{% endblock %} 5 {% block userlinks %}{% url 'django-admindocs-docroot' as docsroot %}{% if docsroot %}<a href="{{ docsroot }}">{% trans 'Documentation' %}</a> / {% endif %} {% trans 'Change password' %} / <a href="../logout/">{% trans 'Log out' %}</a>{% endblock %} 6 {% block breadcrumbs %}<div class="breadcrumbs"><a href="../">{% trans 'Home' %}</a> › {% trans 'Password change' %}</div>{% endblock %} 5 {% block userlinks %}{% url 'django-admindocs-docroot' as docsroot %}{% if docsroot %}<a href="{{ docsroot }}">{% trans 'Documentation' %}</a> / {% endif %} {% trans 'Change password' %} / <a href="{% url 'admin:logout' %}">{% trans 'Log out' %}</a>{% endblock %} 6 {% block breadcrumbs %} 7 <div class="breadcrumbs"> 8 <a href="{% url 'admin:index' %}">{% trans 'Home' %}</a> 9 › {% trans 'Password change' %} 10 </div> 11 {% endblock %} 7 12 8 13 {% block title %}{% trans 'Password change' %}{% endblock %} 9 14 -
django/contrib/admin/templates/registration/password_reset_complete.html
diff --git a/django/contrib/admin/templates/registration/password_reset_complete.html b/django/contrib/admin/templates/registration/password_reset_complete.html index fceb167..7c07707 100644
a b 1 1 {% extends "admin/base_site.html" %} 2 2 {% load i18n %} 3 {% load url from future %} 3 4 4 {% block breadcrumbs %}<div class="breadcrumbs"><a href="../../">{% trans 'Home' %}</a> › {% trans 'Password reset' %}</div>{% endblock %} 5 {% block breadcrumbs %} 6 <div class="breadcrumbs"> 7 <a href="{% url 'admin:index' %}">{% trans 'Home' %}</a> 8 › {% trans 'Password reset' %} 9 </div> 10 {% endblock %} 5 11 6 12 {% block title %}{% trans 'Password reset complete' %}{% endblock %} 7 13 -
django/contrib/admin/templates/registration/password_reset_confirm.html
diff --git a/django/contrib/admin/templates/registration/password_reset_confirm.html b/django/contrib/admin/templates/registration/password_reset_confirm.html index df9cf1b..d5299eb 100644
a b 1 1 {% extends "admin/base_site.html" %} 2 2 {% load i18n %} 3 {% load url from future %} 3 4 4 {% block breadcrumbs %}<div class="breadcrumbs"><a href="../">{% trans 'Home' %}</a> › {% trans 'Password reset confirmation' %}</div>{% endblock %} 5 {% block breadcrumbs %} 6 <div class="breadcrumbs"> 7 <a href="{% url 'admin:index' %}">{% trans 'Home' %}</a> 8 › {% trans 'Password reset confirmation' %} 9 </div> 10 {% endblock %} 5 11 6 12 {% block title %}{% trans 'Password reset' %}{% endblock %} 7 13 -
django/contrib/admin/templates/registration/password_reset_done.html
diff --git a/django/contrib/admin/templates/registration/password_reset_done.html b/django/contrib/admin/templates/registration/password_reset_done.html index e223bdb..fd73af8 100644
a b 1 1 {% extends "admin/base_site.html" %} 2 2 {% load i18n %} 3 {% load url from future %} 3 4 4 {% block breadcrumbs %}<div class="breadcrumbs"><a href="../">{% trans 'Home' %}</a> › {% trans 'Password reset' %}</div>{% endblock %} 5 {% block breadcrumbs %} 6 <div class="breadcrumbs"> 7 <a href="{% url 'admin:index' %}">{% trans 'Home' %}</a> 8 › {% trans 'Password reset' %} 9 </div> 10 {% endblock %} 5 11 6 12 {% block title %}{% trans 'Password reset successful' %}{% endblock %} 7 13 -
django/contrib/admin/templates/registration/password_reset_form.html
diff --git a/django/contrib/admin/templates/registration/password_reset_form.html b/django/contrib/admin/templates/registration/password_reset_form.html index d3a1284..2b591fe 100644
a b 1 1 {% extends "admin/base_site.html" %} 2 2 {% load i18n %} 3 {% load url from future %} 3 4 4 {% block breadcrumbs %}<div class="breadcrumbs"><a href="../">{% trans 'Home' %}</a> › {% trans 'Password reset' %}</div>{% endblock %} 5 {% block breadcrumbs %} 6 <div class="breadcrumbs"> 7 <a href="{% url 'admin:index' %}">{% trans 'Home' %}</a> 8 › {% trans 'Password reset' %} 9 </div> 10 {% endblock %} 5 11 6 12 {% block title %}{% trans "Password reset" %}{% endblock %} 7 13 -
new file django/contrib/admin/templatetags/admin_urls.py
diff --git a/django/contrib/admin/templatetags/admin_urls.py b/django/contrib/admin/templatetags/admin_urls.py new file mode 100644 index 0000000..15e4649
- + 1 from django.core.urlresolvers import reverse, NoReverseMatch 2 from django import template 3 4 register = template.Library() 5 6 @register.filter 7 def admin_url(value, arg): 8 return 'admin:%s_%s_%s' % (value.app_label, value.module_name, arg) -
django/contrib/admindocs/templates/admin_doc/bookmarklets.html
diff --git a/django/contrib/admindocs/templates/admin_doc/bookmarklets.html b/django/contrib/admindocs/templates/admin_doc/bookmarklets.html index 6447529..baa717c 100644
a b 1 1 {% extends "admin/base_site.html" %} 2 3 {% block breadcrumbs %}{% load i18n %}<div class="breadcrumbs"><a href="../../">{% trans "Home" %}</a> › <a href="../">{% trans "Documentation" %}</a> › {% trans "Bookmarklets" %}</div>{% endblock %} 2 {% load i18n %} 3 {% load url from future %} 4 5 {% block breadcrumbs %} 6 <div class="breadcrumbs"> 7 <a href="{% url 'admin:index' %}">{% trans 'Home' %}</a> 8 › <a href="{% url 'django-admindocs-docroot' %}">{% trans 'Documentation' %}</a> 9 › {% trans 'Bookmarklets' %} 10 </div> 11 {% endblock %} 4 12 {% block title %}{% trans "Documentation bookmarklets" %}{% endblock %} 5 13 6 14 {% block content %} -
django/contrib/admindocs/templates/admin_doc/index.html
diff --git a/django/contrib/admindocs/templates/admin_doc/index.html b/django/contrib/admindocs/templates/admin_doc/index.html index a8b21c3..652fbfd 100644
a b 1 1 {% extends "admin/base_site.html" %} 2 2 {% load i18n %} 3 {% block breadcrumbs %}<div class="breadcrumbs"><a href="{{ root_path }}">Home</a> › Documentation</div>{% endblock %} 3 {% load url from future %} 4 5 {% block breadcrumbs %} 6 <div class="breadcrumbs"> 7 <a href="{% url 'admin:index' %}">{% trans 'Home' %}</a> 8 › {% trans 'Documentation' %}</a> 9 </div> 10 {% endblock %} 4 11 {% block title %}Documentation{% endblock %} 5 12 6 13 {% block content %} -
django/contrib/admindocs/templates/admin_doc/missing_docutils.html
diff --git a/django/contrib/admindocs/templates/admin_doc/missing_docutils.html b/django/contrib/admindocs/templates/admin_doc/missing_docutils.html index 97c9d47..34c18ff 100644
a b 1 1 {% extends "admin/base_site.html" %} 2 2 {% load i18n %} 3 {% block breadcrumbs %}<div class="breadcrumbs"><a href="../">Home</a> › Documentation</div>{% endblock %} 3 {% load url from future %} 4 5 {% block breadcrumbs %} 6 <div class="breadcrumbs"> 7 <a href="{% url 'admin:index' %}">{% trans 'Home' %}</a> 8 › {% trans 'Documentation' %}</a> 9 </div> 4 10 {% block title %}Please install docutils{% endblock %} 5 11 6 12 {% block content %} -
django/contrib/admindocs/templates/admin_doc/model_detail.html
diff --git a/django/contrib/admindocs/templates/admin_doc/model_detail.html b/django/contrib/admindocs/templates/admin_doc/model_detail.html index 828df18..82cb405 100644
a b 1 1 {% extends "admin/base_site.html" %} 2 2 {% load i18n %} 3 {% load url from future %} 4 3 5 {% block extrahead %} 4 6 {{ block.super }} 5 7 <style type="text/css"> … … 8 10 </style> 9 11 {% endblock %} 10 12 11 {% block breadcrumbs %}<div class="breadcrumbs"><a href="../../../">Home</a> › <a href="../../">Documentation</a> › <a href="../">Models</a> › {{ name }}</div>{% endblock %} 13 {% block breadcrumbs %} 14 <div class="breadcrumbs"> 15 <a href="{% url 'admin:index' %}">{% trans 'Home' %}</a> 16 › <a href="{% url 'django-admindocs-docroot' %}">{% trans 'Documentation' %}</a> 17 › <a href="{% url 'django-admindocs-models-index' %}">{% trans 'Models' %}</a> 18 › {{ name }} 19 </div> 20 {% endblock %} 12 21 13 22 {% block title %}Model: {{ name }}{% endblock %} 14 23 … … 41 50 </table> 42 51 </div> 43 52 44 <p class="small"><a href=" ../">‹ Back to Models Documentation</a></p>53 <p class="small"><a href="{% url 'django-admindocs-models-index' %}">‹ Back to Models Documentation</a></p> 45 54 </div> 46 55 {% endblock %} -
django/contrib/admindocs/templates/admin_doc/model_index.html
diff --git a/django/contrib/admindocs/templates/admin_doc/model_index.html b/django/contrib/admindocs/templates/admin_doc/model_index.html index 47c94c0..4eb3cf6 100644
a b 1 1 {% extends "admin/base_site.html" %} 2 2 {% load i18n %} 3 {% load url from future %} 4 3 5 {% block coltype %}colSM{% endblock %} 4 {% block breadcrumbs %}<div class="breadcrumbs"><a href="../../">Home</a> › <a href="../">Documentation</a> › Models</div>{% endblock %} 6 7 {% block breadcrumbs %} 8 <div class="breadcrumbs"> 9 <a href="{% url 'admin:index' %}">{% trans 'Home' %}</a> 10 › <a href="{% url 'django-admindocs-docroot' %}">{% trans 'Documentation' %}</a> 11 › {% trans 'Models' %} 12 </div> 13 {% endblock %} 5 14 6 15 {% block title %}Models{% endblock %} 7 16 … … 19 28 <table class="xfull"> 20 29 {% for model in group.list %} 21 30 <tr> 22 <th><a href="{ { model.app_label }}.{{ model.object_name.lower }}/">{{ model.object_name }}</a></th>31 <th><a href="{% url 'django-admindocs-models-detail' app_label=model.app_label model_name=model.object_name.lower %}">{{ model.object_name }}</a></th> 23 32 </tr> 24 33 {% endfor %} 25 34 </table> -
django/contrib/admindocs/templates/admin_doc/template_detail.html
diff --git a/django/contrib/admindocs/templates/admin_doc/template_detail.html b/django/contrib/admindocs/templates/admin_doc/template_detail.html index c04dedc..307dd62 100644
a b 1 1 {% extends "admin/base_site.html" %} 2 2 {% load i18n %} 3 {% block breadcrumbs %}<div class="breadcrumbs"><a href="../../../">Home</a> › <a href="../../">Documentation</a> › Templates › {{ name }}</div>{% endblock %} 3 {% load url from future %} 4 5 {% block breadcrumbs %} 6 <div class="breadcrumbs"> 7 <a href="{% url 'admin:index' %}">{% trans 'Home' %}</a> 8 › <a href="{% url 'django-admindocs-docroot' %}">{% trans 'Documentation' %}</a> 9 › {% trans 'Templates' %} 10 › {{ name }} 11 </div> 12 {% endblock %} 4 13 5 14 {% block title %}Template: {{ name }}{% endblock %} 6 15 … … 17 26 </ol> 18 27 {% endfor %} 19 28 20 <p class="small"><a href=" ../../">‹ Back to Documentation</a></p>29 <p class="small"><a href="{% url 'django-admindocs-docroot' %}">‹ Back to Documentation</a></p> 21 30 {% endblock %} -
django/contrib/admindocs/templates/admin_doc/template_filter_index.html
diff --git a/django/contrib/admindocs/templates/admin_doc/template_filter_index.html b/django/contrib/admindocs/templates/admin_doc/template_filter_index.html index 46ccf0f..1809bc9 100644
a b 1 1 {% extends "admin/base_site.html" %} 2 2 {% load i18n %} 3 {% load url from future %} 4 3 5 {% block coltype %}colSM{% endblock %} 4 {% block breadcrumbs %}<div class="breadcrumbs"><a href="../../">Home</a> › <a href="../">Documentation</a> › filters</div>{% endblock %} 6 {% block breadcrumbs %} 7 <div class="breadcrumbs"> 8 <a href="{% url 'admin:index' %}">{% trans 'Home' %}</a> 9 › <a href="{% url 'django-admindocs-docroot' %}">{% trans 'Documentation' %}</a> 10 › {% trans 'Filters' %} 11 </div> 12 {% endblock %} 5 13 {% block title %}Template filters{% endblock %} 6 14 7 15 {% block content %} -
django/contrib/admindocs/templates/admin_doc/template_tag_index.html
diff --git a/django/contrib/admindocs/templates/admin_doc/template_tag_index.html b/django/contrib/admindocs/templates/admin_doc/template_tag_index.html index 676c025..18e5d95 100644
a b 1 1 {% extends "admin/base_site.html" %} 2 2 {% load i18n %} 3 {% load url from future %} 4 3 5 {% block coltype %}colSM{% endblock %} 4 {% block breadcrumbs %}<div class="breadcrumbs"><a href="../../">Home</a> › <a href="../">Documentation</a> › Tags</div>{% endblock %} 6 {% block breadcrumbs %} 7 <div class="breadcrumbs"> 8 <a href="{% url 'admin:index' %}">{% trans 'Home' %}</a> 9 › <a href="{% url 'django-admindocs-docroot' %}">{% trans 'Documentation' %}</a> 10 › {% trans 'Tags' %} 11 </div> 12 {% endblock %} 5 13 {% block title %}Template tags{% endblock %} 6 14 7 15 {% block content %} -
django/contrib/admindocs/templates/admin_doc/view_detail.html
diff --git a/django/contrib/admindocs/templates/admin_doc/view_detail.html b/django/contrib/admindocs/templates/admin_doc/view_detail.html index c6d080c..41c8121 100644
a b 1 1 {% extends "admin/base_site.html" %} 2 2 {% load i18n %} 3 {% block breadcrumbs %}<div class="breadcrumbs"><a href="../../../">Home</a> › <a href="../../">Documentation</a> › <a href="../">Views</a> › {{ name }}</div>{% endblock %} 3 {% load url from future %} 4 5 {% block breadcrumbs %} 6 <div class="breadcrumbs"> 7 <a href="{% url 'admin:index' %}">{% trans 'Home' %}</a> 8 › <a href="{% url 'django-admindocs-docroot' %}">{% trans 'Documentation' %}</a> 9 › <a href="{% url 'django-admindocs-views-index' %}">{% trans 'Views' %}</a> 10 › {{ name }} 11 </div> 12 {% endblock %} 4 13 {% block title %}View: {{ name }}{% endblock %} 5 14 6 15 {% block content %} … … 21 30 <p>{{ meta.Templates }}</p> 22 31 {% endif %} 23 32 24 <p class="small"><a href=" ../">‹ Back to Views Documentation</a></p>33 <p class="small"><a href="{% url 'django-admindocs-views-index' %}">‹ Back to Views Documentation</a></p> 25 34 {% endblock %} -
django/contrib/admindocs/templates/admin_doc/view_index.html
diff --git a/django/contrib/admindocs/templates/admin_doc/view_index.html b/django/contrib/admindocs/templates/admin_doc/view_index.html index 6b10fa6..e508c84 100644
a b 1 1 {% extends "admin/base_site.html" %} 2 2 {% load i18n %} 3 {% load url from future %} 4 3 5 {% block coltype %}colSM{% endblock %} 4 {% block breadcrumbs %}<div class="breadcrumbs"><a href="../../">Home</a> › <a href="../">Documentation</a> › Views</div>{% endblock %} 6 {% block breadcrumbs %} 7 <div class="breadcrumbs"> 8 <a href="{% url 'admin:index' %}">{% trans 'Home' %}</a> 9 › <a href="{% url 'django-admindocs-docroot' %}">{% trans 'Documentation' %}</a> 10 › {% trans 'Views' %} 11 </div> 12 {% endblock %} 5 13 {% block title %}Views{% endblock %} 6 14 7 15 {% block content %} … … 29 37 30 38 {% for view in site_views.list|dictsort:"url" %} 31 39 {% ifchanged %} 32 <h3><a href="{ { view.module }}.{{ view.name }}/">{{ view.url }}</a></h3>33 <p class="small quiet">View function: {{ view. module }}.{{ view.name }}</p>40 <h3><a href="{% url 'django-admindocs-views-detail' view=view.full_name %}">{{ view.url }}</a></h3> 41 <p class="small quiet">View function: {{ view.full_name }}</p> 34 42 <p>{{ view.title }}</p> 35 43 <hr /> 36 44 {% endifchanged %} -
django/contrib/admindocs/views.py
diff --git a/django/contrib/admindocs/views.py b/django/contrib/admindocs/views.py index 28319be..9725865 100644
a b def view_index(request): 136 136 site_obj = GenericSite() 137 137 for (func, regex) in view_functions: 138 138 views.append({ 139 'name': getattr(func, '__name__', func.__class__.__name__), 140 'module': func.__module__, 139 'full_name': '%s.%s' % (func.__module__, getattr(func, '__name__', func.__class__.__name__)), 141 140 'site_id': settings_mod.SITE_ID, 142 141 'site': site_obj, 143 142 'url': simplify_regex(regex), -
tests/regressiontests/admin_changelist/tests.py
diff --git a/tests/regressiontests/admin_changelist/tests.py b/tests/regressiontests/admin_changelist/tests.py index 709fa76..4b962a6 100644
a b class ChangeListTests(TestCase): 326 326 request.user = user 327 327 return request 328 328 329 # Test with user 'noparents'330 329 m = DynamicListDisplayChildAdmin(Child, admin.site) 330 admin.site.register(Child, DynamicListDisplayChildAdmin) 331 332 # Test with user 'noparents' 331 333 request = _mocked_authenticated_request(user_noparents) 332 334 response = m.changelist_view(request) 333 335 # XXX - Calling render here to avoid ContentNotRenderedError to be … … class ChangeListTests(TestCase): 336 338 self.assertNotContains(response, 'Parent object') 337 339 338 340 # Test with user 'parents' 339 m = DynamicListDisplayChildAdmin(Child, admin.site)340 341 request = _mocked_authenticated_request(user_parents) 341 342 response = m.changelist_view(request) 342 343 # XXX - #15826 343 344 response.render() 344 345 self.assertContains(response, 'Parent object') 345 346 347 admin.site.unregister(Child) 348 346 349 # Test default implementation 347 350 m = ChildAdmin(Child, admin.site) 348 351 request = _mocked_authenticated_request(user_noparents) -
new file tests/regressiontests/admin_custom_urls/__init__.py
diff --git a/tests/regressiontests/admin_custom_urls/__init__.py b/tests/regressiontests/admin_custom_urls/__init__.py new file mode 100644 index 0000000..792d600
- + 1 # -
new file tests/regressiontests/admin_custom_urls/fixtures/actions.json
diff --git a/tests/regressiontests/admin_custom_urls/fixtures/actions.json b/tests/regressiontests/admin_custom_urls/fixtures/actions.json new file mode 100644 index 0000000..d803393
- + 1 [ 2 { 3 "pk": "delete", 4 "model": "admin_custom_urls.action", 5 "fields": { 6 "description": "Remove things." 7 } 8 }, 9 { 10 "pk": "rename", 11 "model": "admin_custom_urls.action", 12 "fields": { 13 "description": "Gives things other names." 14 } 15 }, 16 { 17 "pk": "add", 18 "model": "admin_custom_urls.action", 19 "fields": { 20 "description": "Add things." 21 } 22 }, 23 { 24 "pk": "path/to/file/", 25 "model": "admin_custom_urls.action", 26 "fields": { 27 "description": "An action with '/' in its name." 28 } 29 }, 30 { 31 "pk": "path/to/html/document.html", 32 "model": "admin_custom_urls.action", 33 "fields": { 34 "description": "An action with a name similar to a HTML doc path." 35 } 36 }, 37 { 38 "pk": "javascript:alert('Hello world');\">Click here</a>", 39 "model": "admin_custom_urls.action", 40 "fields": { 41 "description": "An action with a name suspected of being a XSS attempt" 42 } 43 } 44 ] 45 No newline at end of file -
new file tests/regressiontests/admin_custom_urls/fixtures/users.json
diff --git a/tests/regressiontests/admin_custom_urls/fixtures/users.json b/tests/regressiontests/admin_custom_urls/fixtures/users.json new file mode 100644 index 0000000..72d86d7
- + 1 [ 2 { 3 "pk": 100, 4 "model": "auth.user", 5 "fields": { 6 "username": "super", 7 "first_name": "Super", 8 "last_name": "User", 9 "is_active": true, 10 "is_superuser": true, 11 "is_staff": true, 12 "last_login": "2007-05-30 13:20:10", 13 "groups": [], 14 "user_permissions": [], 15 "password": "sha1$995a3$6011485ea3834267d719b4c801409b8b1ddd0158", 16 "email": "super@example.com", 17 "date_joined": "2007-05-30 13:20:10" 18 } 19 } 20 ] -
new file tests/regressiontests/admin_custom_urls/models.py
diff --git a/tests/regressiontests/admin_custom_urls/models.py b/tests/regressiontests/admin_custom_urls/models.py new file mode 100644 index 0000000..f8c83a9
- + 1 from functools import update_wrapper 2 3 from django.contrib import admin 4 from django.db import models 5 6 7 class Action(models.Model): 8 name = models.CharField(max_length=50, primary_key=True) 9 description = models.CharField(max_length=70) 10 11 def __unicode__(self): 12 return self.name 13 14 15 class ActionAdmin(admin.ModelAdmin): 16 """ 17 A ModelAdmin for the Action model that changes the URL of the add_view 18 to '<app name>/<model name>/!add/' 19 The Action model has a CharField PK. 20 """ 21 22 list_display = ('name', 'description') 23 24 def remove_url(self, name): 25 """ 26 Remove all entries named 'name' from the ModelAdmin instance URL 27 patterns list 28 """ 29 return filter(lambda e: e.name != name, super(ActionAdmin, self).get_urls()) 30 31 def get_urls(self): 32 # Add the URL of our custom 'add_view' view to the front of the URLs 33 # list. Remove the existing one(s) first 34 from django.conf.urls.defaults import patterns, url 35 36 def wrap(view): 37 def wrapper(*args, **kwargs): 38 return self.admin_site.admin_view(view)(*args, **kwargs) 39 return update_wrapper(wrapper, view) 40 41 info = self.model._meta.app_label, self.model._meta.module_name 42 43 view_name = '%s_%s_add' % info 44 45 return patterns('', 46 url(r'^!add/$', wrap(self.add_view), name=view_name), 47 ) + self.remove_url(view_name) 48 49 50 admin.site.register(Action, ActionAdmin) -
new file tests/regressiontests/admin_custom_urls/tests.py
diff --git a/tests/regressiontests/admin_custom_urls/tests.py b/tests/regressiontests/admin_custom_urls/tests.py new file mode 100644 index 0000000..cfc6b85
- + 1 from django.core.urlresolvers import reverse 2 from django.template.response import TemplateResponse 3 from django.test import TestCase 4 5 from models import Action 6 7 8 class AdminCustomUrlsTest(TestCase): 9 fixtures = ['users.json', 'actions.json'] 10 11 def setUp(self): 12 self.client.login(username='super', password='secret') 13 14 def tearDown(self): 15 self.client.logout() 16 17 def testBasicAddGet(self): 18 """ 19 A smoke test to ensure GET on the add_view works. 20 """ 21 response = self.client.get('/custom_urls/admin/admin_custom_urls/action/!add/') 22 self.assertIsInstance(response, TemplateResponse) 23 self.assertEqual(response.status_code, 200) 24 25 def testAddWithGETArgs(self): 26 response = self.client.get('/custom_urls/admin/admin_custom_urls/action/!add/', {'name': 'My Action'}) 27 self.assertEqual(response.status_code, 200) 28 self.assertTrue( 29 'value="My Action"' in response.content, 30 "Couldn't find an input with the right value in the response." 31 ) 32 33 def testBasicAddPost(self): 34 """ 35 A smoke test to ensure POST on add_view works. 36 """ 37 post_data = { 38 '_popup': u'1', 39 "name": u'Action added through a popup', 40 "description": u"Description of added action", 41 } 42 response = self.client.post('/custom_urls/admin/admin_custom_urls/action/!add/', post_data) 43 self.assertEqual(response.status_code, 200) 44 self.assertContains(response, 'dismissAddAnotherPopup') 45 self.assertContains(response, 'Action added through a popup') 46 47 def testAdminUrlsNoClash(self): 48 """ 49 Test that some admin URLs work correctly. The model has a CharField 50 PK and the add_view URL has been customized. 51 """ 52 # Should get the change_view for model instance with PK 'add', not show 53 # the add_view 54 response = self.client.get('/custom_urls/admin/admin_custom_urls/action/add/') 55 self.assertEqual(response.status_code, 200) 56 self.assertContains(response, 'Change action') 57 58 # Ditto, but use reverse() to build the URL 59 path = reverse('admin:%s_action_change' % Action._meta.app_label, 60 args=('add',)) 61 response = self.client.get(path) 62 self.assertEqual(response.status_code, 200) 63 self.assertContains(response, 'Change action') 64 65 # Should correctly get the change_view for the model instance with the 66 # funny-looking PK 67 path = reverse('admin:%s_action_change' % Action._meta.app_label, 68 args=("path/to/html/document.html",)) 69 response = self.client.get(path) 70 self.assertEqual(response.status_code, 200) 71 self.assertContains(response, 'Change action') 72 self.assertContains(response, 'value="path/to/html/document.html"') -
new file tests/regressiontests/admin_custom_urls/urls.py
diff --git a/tests/regressiontests/admin_custom_urls/urls.py b/tests/regressiontests/admin_custom_urls/urls.py new file mode 100644 index 0000000..6c2761a
- + 1 from django.conf.urls.defaults import * 2 from django.contrib import admin 3 4 urlpatterns = patterns('', 5 (r'^admin/', include(admin.site.urls)), 6 ) 7 -
tests/regressiontests/admin_views/tests.py
diff --git a/tests/regressiontests/admin_views/tests.py b/tests/regressiontests/admin_views/tests.py index 22b65a6..33e6dc3 100644
a b class SaveAsTests(TestCase): 590 590 self.assertTrue(response.context['save_as']) 591 591 post_data = {'_saveasnew':'', 'name':'John M', 'gender':3, 'alive':'checked'} 592 592 response = self.client.post('/test_admin/admin/admin_views/person/1/', post_data) 593 self.assertEqual(response.context['form_url'], ' ../add/')593 self.assertEqual(response.context['form_url'], '/test_admin/admin/admin_views/person/add/') 594 594 595 595 class CustomModelAdminTest(AdminViewBasicTest): 596 596 urlbit = "admin2" … … class AdminViewPermissionsTest(TestCase): 835 835 self.client.post('/test_admin/admin/', self.adduser_login) 836 836 addpage = self.client.get('/test_admin/admin/admin_views/article/add/') 837 837 self.assertEqual(addpage.status_code, 200) 838 change_list_link = ' <a href="../">Articles</a> ›'838 change_list_link = '› <a href="/test_admin/admin/admin_views/article/">Articles</a>' 839 839 self.assertFalse(change_list_link in addpage.content, 840 840 'User restricted to add permission is given link to change list view in breadcrumbs.') 841 841 post = self.client.post('/test_admin/admin/admin_views/article/add/', add_dict) -
tests/urls.py
diff --git a/tests/urls.py b/tests/urls.py index b3f719d..dda0b2e 100644
a b 1 1 from django.conf.urls.defaults import * 2 2 3 4 3 urlpatterns = patterns('', 5 4 # test_client modeltest urls 6 5 (r'^test_client/', include('modeltests.test_client.urls')), … … urlpatterns = patterns('', 29 28 # admin widget tests 30 29 (r'widget_admin/', include('regressiontests.admin_widgets.urls')), 31 30 31 # admin custom URL tests 32 (r'^custom_urls/', include('regressiontests.admin_custom_urls.urls')), 33 32 34 )