Saltar al contenido

¿Cómo implementar migas de pan en una plantilla de Django?

Hacemos una revisión profunda cada una de las secciones de nuestra web con el objetivo de enseñarte siempre información veraz y certera.

Solución:

Nota: proporciono el fragmento completo a continuación, ya que djangosnippets ha sido meticuloso últimamente.

Genial, alguien encontró mi fragmento 🙂 El uso de la etiqueta de mi plantilla es bastante simple.

Para responder a su pregunta no hay “incorporado” Mecanismo de django para lidiar con migas de pan, pero nos proporciona la siguiente mejor opción: etiquetas de plantilla personalizadas.

Imagina que quieres tener migas de pan así:

Services -> Programming
Services -> Consulting

Entonces probablemente tendrá algunas URL con nombre: “servicios”, y “programación”, “consultante”:

    (r'^services/$',
     'core.views.services',
     ,
     'services'),

    (r'^services/programming$',
     'core.views.programming',
     ,
     'programming'),

    (r'^services/consulting$',
     'core.views.consulting',
     ,
     'consulting'),

Ahora, dentro de su plantilla html (echemos un vistazo a la página de consulta), todo lo que tiene que poner es:

//consulting.html
% load breadcrumbs %

% block breadcrumbs %
% breadcrumb_url 'Services' services %
% breadcrumb_url 'Consulting' consulting %

% endblock %

Si desea usar algún tipo de texto personalizado dentro de la ruta de navegación y no desea vincularlo, puede usar migaja de pan etiqueta en su lugar.

//consulting.html
% load breadcrumbs %

% block breadcrumbs %
  % breadcrumb_url 'Services' services %
  % breadcrumb_url 'Consulting' consulting %
  % breadcrumb 'We are great!' %  
% endblock %

Hay situaciones más complicadas en las que es posible que desee incluir una identificación de un objeto en particular, lo que también es fácil de hacer. Este es un ejemplo más realista:

% load breadcrumbs %

% block breadcrumbs %
% breadcrumb_url 'Employees' employee_list %
% if employee.id %
    % breadcrumb_url employee.company.name company_detail employee.company.id %
    % breadcrumb_url employee.full_name employee_detail employee.id %
    % breadcrumb 'Edit Employee ' %
% else %
    % breadcrumb 'New Employee' %
% endif %

% endblock %

Fragmento de migas de pan de DaGood

Proporciona dos etiquetas de plantilla para usar en sus plantillas HTML: breadcrumb y breadcrumb_url. El primero permite crear una URL simple, con la parte del texto y la parte de la URL. O solo texto desvinculado (como el último elemento de la ruta de navegación, por ejemplo). El segundo, ¡puede tomar la URL nombrada con argumentos! Además, toma un título como primer argumento.

Este es un archivo templatetag que debe ir a su directorio / templatetags.

Simplemente cambie la ruta de la imagen en el método create_crumb y ¡listo!

¡No olvide % load breadcrumbs% en la parte superior de su plantilla html!

desde django import template from django.template import loader, Node, Variable from django.utils.encoding import smart_str, smart_unicode from django.template.defaulttags import url from django.template import VariableDoesNotExist register = template.Library () @ register.tag def migas de pan (analizador, token):
    """
    
    Renderiza la miga de pan.  Ejemplos: % ruta de navegación "Título de la ruta de navegación" url_var% % ruta de navegación context_var url_var% % ruta de navegación "Solo el titulo" % % breadcrumb just_context_var% Parámetros: -El primer parámetro es el título de la miga, -El segundo parámetro (opcional) es la variable de URL a la que enlazar, producida por la etiqueta de URL, es decir: % url person_detail object.id como person_url % luego: % breadcrumb person.name person_url% @author Andriy Drozdyuk
    """
    
    devolver BreadcrumbNode (token.split_contents ()[1:]) @ register.tag def breadcrumb_url (analizador, token):
    """
    
    Igual que la ruta de navegación, pero en lugar de la variable de contexto de la URL, toma todos los argumentos que toma la etiqueta de la URL.  % ruta de navegación "Título de la ruta de navegación" person_detail person.id% % ruta de navegación person.name person_detail person.id%
    """

    

    bits = token.split_contents () if len (bits) == 2: return breadcrumb (analizador, token) # Extrae nuestro parámetro de título adicional title = bits.pop (1) token.contents = '' .join (bits) url_node = url (analizador, token) return UrlBreadcrumbNode (título, url_node) clase BreadcrumbNode (Nodo): def __init __ (self, vars):
        """
        
        La primera var es el título, la segunda var es la variable de contexto de la URL
        """
        
        self.vars = map (Variable, vars) def render (self, context): title = self.vars[0].var si title.find ("'") == - 1 y title.find ('"') == - 1: prueba: val = self.vars[0]
                title = val.resolve (context) excepto: title = '' else: title = title.strip ("'").banda('"') title = smart_unicode (title) url = None if len (self.vars)> 1: val = self.vars[1]
            try: url = val.resolve (context) except VariableDoesNotExist: print 'URL does not exist', val url = None return create_crumb (title, url) class UrlBreadcrumbNode (Node): def __init __ (self, title, url_node): self. title = Variable (título) self.url_node = url_node def render (self, context): title = self.title.var if title.find ("'") == - 1 y title.find ('"') == - 1: try: val = self.title title = val.resolve (context) excepto: title =' 'else: title = title.strip ("'").banda('"') title = smart_unicode (title) url = self.url_node.render (context) return create_crumb (title, url) def create_crumb (title, url = None):
    """
    
    Función auxiliar
    """
    
    miga = """"""  
            """Flecha"""  
            """"""
    
    if url: crumb = "%s%s
" % (crumb, url, title) else: crumb = "% s% s" % (miga, título) devuelve miga

Los módulos de vista de administración de Django tienen módulos de pan automáticos, que se implementan así:

% block breadcrumbs %
    
% endblock %

Así que hay algún tipo de soporte integrado para esto …

Mis funciones de vista emiten las migas de pan como una lista simple.

Alguna información se guarda en la sesión del usuario. Sin embargo, indirectamente proviene de las URL.

Las migas de pan no son una simple lista lineal de dónde han estado; para eso está el historial del navegador. Una simple lista de dónde han estado no es una buena ruta de navegación porque no refleja ningún significado.

Para la mayoría de nuestras funciones de vista, la navegación es bastante fija y se basa en el diseño de plantilla / vista / URL. En nuestros casos, hay mucha profundización en los detalles, y las rutas de exploración reflejan ese estrechamiento: tenemos una “reino”, a “lista”, a “padre” y un “niño”. Forman una jerarquía simple de lo general a lo específico.

En la mayoría de los casos, una URL bien definida se puede dividir trivialmente en un buen rastro de migas de pan. De hecho, esa es una prueba para un buen diseño de URL: la URL puede interpretarse como rutas de navegación y mostrarse de manera significativa a los usuarios.

Para algunas funciones de vista, donde presentamos información que es parte de un “muchos a muchos” unirse, por ejemplo, hay dos padres candidatos. La URL puede decir una cosa, pero la pila de contexto de la sesión dice otra.

Por esa razón, nuestras funciones de vista tienen que dejar pistas de contexto en la sesión para que podamos emitir rutas de navegación.

Al final de todo puedes encontrar las crónicas de otros administradores, tú de igual manera puedes dejar el tuyo si dominas el tema.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *