URL almacenadas en la base de datos para el sitio Django

He producido algunos sitios de Django, pero hasta ahora he estado mapeando vistas individuales y URL en urls.py.

Ahora he intentado crear un pequeño CMS personalizado, pero tengo problemas con las URL. Tengo una tabla de base de datos (SQLite3) que contiene código para las páginas como una columna para el encabezado, una para el menú de la derecha, otra para el contenido, etc., etc. También tengo una columna para la URL. ¿Cómo puedo hacer que Django llame la información en la tabla de la base de datos desde la URL almacenada en la columna en lugar de tener que codificar una vista y la URL para cada página (lo que obviamente anula el propósito de un CMS)?

Si alguien me puede señalar la parte correcta de los documentos o un sitio que explique esto, sería de gran ayuda.

Gracias a todos.

Usted no tiene que hacerlo en la forma plana.

Para los modelos, que deberían ser direccionables, hago esto:

En urls.py tengo un url-mapping como

url(r'(?P[a-z1-3_]{1,})/$','cms.views.category_view', name="category-view") 

en este caso, la expresión regular (?P[a-z1-3_]{1,}) devolverá una variable llamada slug y la enviará a mi vista cms.views.category_view . En esa vista pregunto así:

 @render_to('category.html') def category_view(request, slug): return {'cat':Category.objects.get(slug=slug)} 

(Nota: estoy usando el decorador molesto render_to – es lo mismo que render_to_response , solo que más corto)

Editar Esto debe ser cubierto por el tutorial . Aquí encontrará la configuración de la url y el envío en cada detalle. El djangobook también lo cubre. Y verifique el módulo de expresiones regulares de pythons.

Por supuesto que puedes usar este código.

Tu pregunta está un poco torcida, pero creo que lo que estás pidiendo es algo similar a cómo django.contrib.flatpages maneja esto. Básicamente, utiliza middleware para detectar el error 404 y luego busca si alguna de las páginas planas tiene un campo de URL que coincida.

Hicimos esto en un sitio donde todas las URL se hicieron “compatibles con los motores de búsqueda”. Anulamos el método save (), fusionamos el título en this_is_the_title.html (o lo que sea) y luego lo almacenamos en una tabla separada que tenía una URL => object class / id mapping.ng (esto significa que está listado antes de las páginas planas en el lista de middleware).