Pregunta

Estoy tratando de personalizar un CMS escrito en Django. Los editores de contenido no son lo suficientemente flexibles, así que estoy tratando de encontrar una solución mejor.

Sin sobre explicarlo, me gustaría que fuera un poco como django-better-chunks o django-flatblocks . Configura una región editable completamente desde dentro de la plantilla. Quiero vincular estas regiones editables a una combinación de cadenas e instancias de objetos. Un ejemplo sería tener múltiples regiones editables basadas en un producto:

{% block product_instance "title" %}
{% block product_instance "product description" %}

Entonces, si tiene una vista con otro producto como product_instance , esos dos bloques mostrarían datos diferentes. También vería que hay uso para bloques de todo el sitio que solo pasan a través de la parte de cadena. Esencialmente, me gustaría poder pasar identificadores de 1 infinito.

Pero realmente estoy luchando en dos frentes aquí:

  1. ¿Cómo defino la relación entre el identificador mixto y el contenido real " bloque " ¿ejemplo? Tengo la sensación de que los tipos de contenido pueden aparecer aquí, ¡pero realmente no tengo idea de dónde empezar a buscar!

  2. ¿Y cómo escribo una etiqueta de plantilla para leer la sintaxis anterior y convertirla en un objeto para renderizar?

¿Fue útil?

Solución

para esto puedes crear una etiqueta de inclusión y usarla como:

{% load my_tags %}
{% product bicycle <extra vars ...> %}

Para definir la etiqueta, agregue a su aplicación / templatetags / mytags.py:

@register.inclusion_tag('results.html')
def product(item, *extra):
    #maybe repackage extra variables
    #and add them to the returned dictionary
    item_form = ItemForm(item) #form.ModelForm instance
    return {'item': item, 'item_form':item_form, ...}

Luego, necesitarás una plantilla que devuelva html para el artículo:

<h1>{{item.title}}</h1>
{{item_form}}
... add some conditional statements depending on extra vars
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top