2013-03-14 2 views
22

Sto sperimentando con Django e sto cercando come impostare urls.py e come funzionano gli URL. Ho configurato urls.py nella radice del progetto, per indirizzare il mio blog e l'amministratore. Ma ora voglio aggiungere una pagina a casa mia, quindi su localhost: 8000.Cartelle di modelli Django

Così ho aggiunto al seguente codice al urls.py nella radice del progetto:

from django.views.generic.simple import direct_to_template 

urlpatterns = patterns('', 
    (r"^$", direct_to_template, {"template": "base.html"}), 
) 

Il problema è che si cerca per il modello in Blog/templates/... Invece della cartella dei modelli nella mia root. Che contiene il base.html

piena urls.py:

from django.conf.urls import patterns, include, url 
from django.views.generic.simple import direct_to_template 

# Uncomment the next two lines to enable the admin: 
from django.contrib import admin 
admin.autodiscover() 


urlpatterns = patterns('', 
    (r"^$", direct_to_template, {"template": "base.html"}), 
    url(r'^blog/', include('hellodjango.blog.urls')), 
    url(r'^admin/doc/', include('django.contrib.admindocs.urls')), 
    url(r'^admin/', include(admin.site.urls)), 
    (r'^tinymce/', include('tinymce.urls')), 
) 

EDIT: aggiunto urls.py completa :)

Sto trascurando qualcosa?

+0

può inviare prego la tua urls.py completa? – Brandon

+0

@Brandon aggiunto :) – Kevinvhengst

risposta

49

Hai impostato TEMPLATE_DIRS nel tuo settings.py? Verifica e assicurati che sia impostato correttamente con percorsi assoluti. Questo è come mi assicuro che sia correttamente impostato:

settings.py

PROJECT_ROOT = os.path.abspath(os.path.dirname(__file__)) 

TEMPLATE_DIRS = (
    # Put strings here, like "/home/html/django_templates" or "C:/www/django/templates". 
    # Always use forward slashes, even on Windows. 
    # Don't forget to use absolute paths, not relative paths. 
    os.path.join(PROJECT_ROOT, 'templates').replace('\\','/'), 
) 

# List of callables that know how to import templates from various sources. 
TEMPLATE_LOADERS = (
    'django.template.loaders.filesystem.Loader', 
    'django.template.loaders.app_directories.Loader', 
#  'django.template.loaders.eggs.Loader', 
) 

In questo modo, ho una cartella templates nel mio principale del progetto che viene utilizzato per i modelli non-app e ogni applicazione ha un Cartella templates/appname all'interno della stessa app.

Se si desidera utilizzare un modello dalla cartella dei modelli di root, basta dare il nome del modello, come 'base.html' e se si desidera utilizzare un modello di applicazione, si utilizza 'appname/base.html'

struttura di cartelle:

project/ 
    appname/ 
    templates/ 
     appname/ <-- another folder with app name so 'appname/base.html' is from here 
     base.html 
    views.py 
    ... 

    templates/ <-- root template folder so 'base.html' is from here 
    base.html 

    settings.py 
    views.py 
    ... 
+0

Thx! Ho modificato le impostazioni in setteings.py e tutto funziona come previsto! thx molto :) trovo ancora difficile capire alcuni poblems che ha a che fare con settings.py. Sono contento che stia funzionando. Grazie mille! – Kevinvhengst

+0

@KevinvanHengst Nessun problema, quando ho iniziato mi sono imbattuto in problemi simili e ho dovuto scavare per una risposta per un po ', felice di poter aiutare. – Ngenator

+0

Grazie per l'ottima risposta. Lo sto facendo ora e i modelli di app funzionano, ma l'estensione di un modello di progetto no. Il caricatore di modelli continua a cercare solo all'interno della cartella dell'app. Eventuali suggerimenti? – cbrad

2

vorrei ri-organizzare gli URL in quanto tale:

urlpatterns = patterns('', 
    (r'^admin/doc/', include('django.contrib.admindocs.urls')), 
    (r'^admin/', include(admin.site.urls)), 
    (r'^tinymce/', include('tinymce.urls')), 
    (r'^blog/', include('hellodjango.blog.urls')), 
    (r'^$', direct_to_template, {"template": "base.html"}), 
) 

modelli sono abbinati per la loro specificità, così ho tendono a mettere al primo posto i modelli più specifici. Altrimenti potresti vedere un comportamento inaspettato. Fai una prova e, se sta ancora caricando un modello dal tuo blog su una richiesta a /, scaveremo più a fondo.

+0

Sta ancora cercando di caricare modelli da blog/modelli. Ho esaminato il settings.py se ho rovinato qualcosa con TEMPLATE_DIR, ma non ne ho specificato uno. Quindi sono ancora curioso di sapere come ottenere questo percorso. – Kevinvhengst

+0

Consiglierei di impostare una directory dei modelli. – Brandon

+0

Sì, guarda il '' TEMPLATE_DIR'' in '' settings.py'' e troverai qualcosa. Maggiori informazioni su questa impostazione nella documentazione di Django e probabilmente la sistemerai. –

3
from django.conf.urls import patterns, include, url 

# Uncomment the next two lines to enable the admin: 
from django.contrib import admin 
admin.autodiscover() 


urlpatterns = patterns('', 
    url(r'^blog/', include('hellodjango.blog.urls')), 
    url(r'^admin/doc/', include('django.contrib.admindocs.urls')), 
    url(r'^admin/', include(admin.site.urls)), 
    url(r'^tinymce/', include('tinymce.urls')), 
) 

urlpatterns += patterns(
    'django.views.generic.simple', 
    (r'^', 'direct_to_template', {"template": "base.html"}), 
) 
0

Penso che dipenda da ciò che desideri sia la tua home page. Se è semplicemente una pagina con collegamenti ad altre parti del tuo sito allora la risposta catherine's è un bel modo pulito.

Se si desidera che la radice del vostro sito per essere il vostro blog per esempio vorrei fare questo:

urlpatterns = patterns('', 
    # Django Admin 
    url(r'^admin/', include(admin.site.urls)), 
    # Tiny MCE Urls 
    url(r'^tinymce/', include('tinymce.urls')), 
    # Other App 
    url(r'^other/', include('projectname.other.urls', namespace='other')), 
    # Blog App 
    url(r'^', include('projectname.blog.urls', namespace='blog')), 
) 

Inoltre, non dimenticare di spazio nome vostro URL include: https://docs.djangoproject.com/en/dev/topics/http/urls/#url-namespaces