Django: ¿cómo puedo obtener un enlace permanente para trabajar con la babosa "desechable"?
Estoy tratando de agregar babosas a la url en mi aplicación django, al igual que SO.
Actualmente, tengo páginas que funcionan bien con una url como esta:
http://example.com/foo/123/
Me gustaría añadir urls 'slugified' así:
http://example.com/foo/123/foo-name-here
Puedo hacer que funcione bien, simplemente modificando urlconf y agregando un valor desechable a la función de vista:
#urls.py
ulpatterns = patterns('project.app.views',
url(r'^foo/(?P<foo_id>\d+)/(?P<name_slug>\w+)/Ver la url con el slug funciona bien.
Sin embargo, mi problema es cuando estoy usando@models.permalink
.
Para miFoo
modelo, solía tener lo siguiente, que funcionaba bien:
@models.permalink
def get_absolute_url(self):
return ('foo_detail', [str(self.id),])
Sin embargo, después de mi cambio, siempre que llame{{ foo.get_absolute_url }}
en mis plantillas, el resultado es siempre una cadena vacía.
He intentado los siguientes dos reemplazos paraget_absolute_url
, ninguno de los cuales está funcionando:
from django.template.defaultfilters import slugify
# attempt 1
@models.permalink
def get_absolute_url(self):
return ('foo_detail', [str(self.id), slugify(self.name)])
# attempt 2
@models.permalink
def get_absolute_url(self):
return ('foo_detail', (), {
'foo_id': str(self.id),
'name_slug': slugify(self.name),
})
Tenga en cuenta que si agrego unprint slugify(self.name)
Antes de volver, el nombre slugified se muestra en la consola muy bien.
Al invocar{{ foo.get_absolute_url }}
en mis plantillas, el resultado es siempre una cadena vacía y no recibo ningún error.
Sé que podría reemplazar el método conreturn '/foo/%s/%s' % (str(self.id), slugify(self.name))
, pero estoy intentando que el enlace permanente funcione para que mi URL solo se defina en un lugar. ¿Qué estoy haciendo mal?
, 'foo_detail', name='foo_detail'),
)
#views.py:
def foo_detail(request, foo_id, name_slug):
# stuff here, name slug is just discarded
Ver la url con el slug funciona bien.
Sin embargo, mi problema es cuando estoy usando@models.permalink
.
Para miFoo
modelo, solía tener lo siguiente, que funcionaba bien:
@models.permalink
def get_absolute_url(self):
return ('foo_detail', [str(self.id),])
Sin embargo, después de mi cambio, siempre que llame{{ foo.get_absolute_url }}
en mis plantillas, el resultado es siempre una cadena vacía.
He intentado los siguientes dos reemplazos paraget_absolute_url
, ninguno de los cuales está funcionando:
from django.template.defaultfilters import slugify
# attempt 1
@models.permalink
def get_absolute_url(self):
return ('foo_detail', [str(self.id), slugify(self.name)])
# attempt 2
@models.permalink
def get_absolute_url(self):
return ('foo_detail', (), {
'foo_id': str(self.id),
'name_slug': slugify(self.name),
})
Tenga en cuenta que si agrego unprint slugify(self.name)
Antes de volver, el nombre slugified se muestra en la consola muy bien.
Al invocar{{ foo.get_absolute_url }}
en mis plantillas, el resultado es siempre una cadena vacía y no recibo ningún error.
Sé que podría reemplazar el método conreturn '/foo/%s/%s' % (str(self.id), slugify(self.name))
, pero estoy intentando que el enlace permanente funcione para que mi URL solo se defina en un lugar. ¿Qué estoy haciendo mal?