Come posso ottenere un accurato URL assoluto da get_absolute_url con un'urls.py inclusa nel Django?

StackOverflow https://stackoverflow.com/questions/947797

Domanda

Ho la costruzione di un'applicazione in questo momento che sto cercando di mantenere correttamente disaccoppiato dalle altre applicazioni nel mio progetto Django (sentitevi liberi di farmi la predica su come mantenere Django apps disaccoppiato, sarei felice di saperne di più qualsiasi / tutto il tempo).

Il mio problema è questo: metodo di L'absolute_url get_ () che ho scritto è la restituzione di un percorso relativo in base alla mia vista. Penso che sia sbagliato avere per aggiungere uno speciale vista con nome nel progetto urls.py solo così posso avere URL assoluti nella mia app, e io non riesco a capire quello che sto facendo male. Quindi, se qualcuno mi può dare una mano, io apprezzo molto (e si parla, quando ho comunicato questa ventosa!)

Ho un urls.py a livello di progetto che include un altro urls.py sulla base del modello di URL in questo modo (i nomi sono verbose per questo esempio solo):

project-urls.py

urlpatterns = patterns('',
    ('^$', direct_to_template, {'template': 'base.html'}),
    (r'^app', include('project.app.urls')),
)

app-urls.py

urlpatterns = patterns('',
    url(r'(?P<slug>[-\w]+)?/?$', 'app.views.home', name='app_home'),
)

Ora, nel mio modello, ho qualcosa di simile a questo:

class AppModel(models.Model):
    title               = models.CharField(_('title'), max_length=100)
    slug                = models.SlugField(_('slug'), unique=True)

    @permalink
    def get_absolute_url(self):
        return ('app_home', None, {'slug': self.slug})

Quando chiamo {{AppInstance.get_ absolute_url}} nel modello, ho qualcosa di simile:

/slug-is-here

Il che non è obvs assoluta e ha un senso in base alla mia urls.py. Cosa devo cambiare per ottenere un vero e proprio URL assoluto mantenendo questa applicazione pulito e non accoppiarlo troppo profondamente w / progetto?

È stato utile?

Soluzione

Welp,

Si scopre che quando vedevo questo:

/slug-is-here

I dovuto guardare più da vicino. Che cosa stava realmente accadendo era:

/app-pathslug-is-here

mi mancava una barra sul regex di mia app nel mio progetto urls.py.

Quindi, sì. lasciare che sia una lezione per tutti voi.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top