2012-02-23 35 views
6

He estado desarrollando una aplicación usando el sistema Flask muy fácil de recoger y he usado una plantilla jinja para escribir un grupo de enlaces que corresponden a páginas en Flask que son definido por algo como esto:una variable jinja para el directorio raíz de la matraz

@app.route(/<var1>/<var2>) 
... 
... 

en el servidor de prueba estos enlaces funcionan igual de bien sin embargo cuando muevo desde el servidor de prueba a un servidor detrás de un proxy consigo un problema en el que los enlaces href no toman en cuenta el nombre de directorio adicional insertado por mi proxy.

#where a link should read: 
server:/myapp/<var1>/<var2> 
# it acually puts out: 
server:/<var1>/<var2> 

mi jinja etemplate se parece a esto, pero me pregunto si en lugar de poner una barra invertida hay una manera de poner una variable que especifica el directorio raíz.

{% block navigation %} 
{% for record in db.values() %} 
<li><a href="/{{db.name}}/{{record.name}}">{{record.name}}</a></li> 
{% endfor %} 
{% endblock %} 

Cualquier ayuda sería muy apreciada. ¡Gracias equipo de Flask!

Respuesta

6

En primer lugar, como se dijo @reclosedev, puede generar URLs usando la función url_for (suponiendo que la función de vista se llama myview:

<a href="{{ url_for('myview', var1=db.name, var2=record.name) }}"> 

En segundo lugar, si estás detrás de un proxy inverso, envoltura la aplicación WSGI con this decorator que actualiza el entorno de la solicitud para que el frasco genera direcciones URL correctas.

+0

gracias alex, en realidad estoy usando ese fragmento, pero los enlaces que generé en mi plantilla no se actualizaron con las nuevas ubicaciones. Gracias. – zach

3

Quizás esté buscando url_for function?

<li><a href="{{ url_for('view_func_name', 
         var1=db.name, 
         var2=record.name) }}">{{record.name}}</a></li> 
+2

Además, si estás detrás de un proxy inverso, echa un vistazo a [este fragmento frasco] (http://flask.pocoo.org/snippets/35 /). –

+0

@AlexMorega, probablemente este fragmento es la solución para el problema de OP y creo que debería publicarse como respuesta. – reclosedev

+0

bien, gracias :) –

Cuestiones relacionadas