2012-04-07 17 views
22

Quiero crear una página personalizada para el panel de administración sin modelo. Por primera copio index.html para proyectar carpeta:¿Cómo puedo crear una página personalizada para admin de django?

mysite/ 
    templates/ 
     admin/ 
      index.html 

A continuación, añadir a bloquear aplicaciones mi código:

<div class="module"> 
    <table summary="{% blocktrans with name="preferences" %}Models available in the preferences application.{% endblocktrans %}"> 
     <caption><a href="preferences" class="section">{% blocktrans with name="preferences" %}Preferences{% endblocktrans %}</a></caption> 
      <tr> 
       <th scope="row"><a href="preferences">Preferences</a></th> 
       <td><a href="preferences" class="changelink">{% trans 'Change' %}</a></td> 
      </tr> 
    </table> 
</div> 

Esto funciona bien, entonces puedo crear nuevas páginas/plantillas/admin/preferencias/preferencias .html y añadir a urls.py:

url(r'^admin/preferences/$', TemplateView.as_view(template_name='admin/preferences/preferences.html')), 

y agregar código a preferences.html:

{% extends "admin/base_site.html" %} 
{% block title %}Test page{% endblock %} 

Ejecútelo y vea el mensaje con error "La página de administración solicitada no existe.". ¿Qué hice mal?

+0

¿A qué 'urls.py' agregaste la URL? Puede ser que una expresión regular más general en el administrador de Django esté capturando '/ admin/preferences' para que nunca llegue a su URL regex. –

+0

Tengo solo un urls.py en /misitio/misis/urls.py, creo que esto no es un error en las URL porque no he tenido errores con los patrones de URL. – Gr1N

+0

No recibirá un mensaje de error si este es el caso. ¿Has intentado cambiar la URL a otra cosa para ver si consigues la página de administración en ese caso? Por ejemplo, '^ testadmin/preferences/$'? –

Respuesta

21

es necesario agregar la URL de su administrador antes de los patrones de URL de la propia administración:

urlpatterns = patterns('', 
    url(r'^admin/preferences/$', TemplateView.as_view(template_name='admin/preferences/preferences.html')), 
    url(r'^admin/', include('django.contrib.admin.urls')), 
) 

De esta manera la URL no será procesada por la administración de Django.

+2

¿La página estará protegida o está abierta al público? –

12

Debería estar usando el administrador get_urls.

+3

'get_urls' es un método de' ModelAdmin' que a su vez necesita un 'Modelo', pero el OP específicamente quiere" crear una página personalizada para el panel de administración ** sin modelo ** ". (Énfasis añadido.) – Louis

5

Aquí es un ejemplo de todo lo que debería ser necesario (a partir de Django 1.6) para una página de administración personalizado que está enlazado desde un botón situado junto al botón "Historia" en la parte superior derecha de la página de detalles de un objeto:

https://gist.github.com/mattlong/4b64212e096766e058b7

Cuestiones relacionadas