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?

Respuestas a la pregunta(1)

Su respuesta a la pregunta