urls tutorial template examples bootstrap python django django-templates

python - tutorial - django urls



Etiqueta de plantilla Django para insertar o reemplazar el parĂ¡metro URL (3)

¿Alguien conoce una etiqueta de plantilla de Django que toma la ruta actual y la cadena de consulta e inserta o reemplaza un valor de cadena de consulta?

por ejemplo, una solicitud a / some / custom / path? q = cómo + ahora + brown + cow & page = 3 & filter = person

La llamada {% urlparam ''page'' 4 %} generaría /some/custom/path?q=how+now+brown+cow&page=4&filter=person .

Esto no sería muy difícil de escribir desde cero, pero como esto parece una tarea muy común, esperaría que una etiqueta como esta esté incorporada. Sin embargo, después de leer los documentos y buscar en Google, parece que no puedo encontrar a nadie que haya publicado una etiqueta de ese tipo.


Quiero presentar una serie de enlaces de paginación en una página de búsqueda. La URL contiene varios parámetros de consulta (como en mi ejemplo). El código de paginación que representa los enlaces de paginación no debe tener explícitamente todos estos parámetros. El administrador de Django parece tener este comportamiento en todas partes.

Esto se habilita agregando django.core.context_processors.request a TEMPLATE_CONTEXT_PROCESSORS (no está habilitado de manera predeterminada). Esto agregará una variable de request a sus plantillas, que es el objeto HttpRequest .

Desde allí, puede usar {{ request.get_full_path }} para obtener la URL actual con la cadena de consulta completa, y luego agregar su consulta personalizada a la misma.

Si su página es /search?q=foo+bar , y quiere que un nuevo enlace sea /search?q=foo+bar&page=4 , <a href="{{ request.get_full_path }}&page=4">page 4</a> .


Así es como lo hice en un proyecto de Django 1.3. Al igual que usted, esperaba encontrar esto integrado, pero terminé codificándolo en la vista:

def remove_url_param(url, params): if not isinstance(params, list): params = [params,] if isinstance(url, unicode): # urlencode doesn''t like unicode url = url.encode(''utf8'') (scheme, netloc, path, query, fragment) = urlparse.urlsplit(url) param_dict = parse_qs(query) for p in params: try: del(param_dict[p]) except KeyError: pass query = urllib.urlencode(param_dict, True) return urlparse.urlunsplit((scheme, netloc, path, query, fragment))

Luego usé esto para crear URL base:

page_url_unordered = putils.remove_url_param( request.get_full_path(), [''order'', ''ajax''] )

Luego en la plantilla:

<a href="{{ page_url_unordered }}&amp;order=price">Price</a> <a href="{{ page_url_unordered }}&amp;order=size">Size</a>