Topic: Associazione tra URLS e VIEWS in Django  (Letto 1959 volte)

0 Utenti e 1 Visitatore stanno visualizzando questo topic.

Offline luigitux

  • python unicellularis
  • *
  • Post: 17
  • Punti reputazione: 0
    • Mostra profilo
    • luigitux Blog
Associazione tra URLS e VIEWS in Django
« il: Ottobre 21, 2008, 14:50 »
ragazzi mi servirebbe una mano per gli urls di django!!! 

praticamente volevo creare un blog solo ke nn riesco a creare gli url partendo dagli slug...

questa è la mia situazione

[hlpycode]#MODELS.PY
class Article(models.Model):
   titolo = models.CharField(max_length=200)
   sottotitolo = models.CharField(max_length=200, blank=True)
   testo = models.TextField(max_length=1000)
   data_pub =  models.DateTimeField('Data Pubblicazione', editable=True)
   slug = models.SlugField (blank=True)
   autore = models.ForeignKey(User)
   
   def __unicode__(self):
      return '%s' %(self.titolo) #%(self.data_pub)
      
   def save(self):
      if self.slug == '':
         self.slug = slugify(self.titolo)
      else:
         self.slug = slugify(self.slug)
      super(Article, self).save()
      
   def getArticle(self):
      return Article.objects.all()

#VIEWS.PY
from django.shortcuts import render_to_response
from djangoblog.blog.models import *
from django.http import Http404
 


def blog_index(request, slug):
   latest_article_list = Article.objects.all().order_by('-data_pub')[:5]
   menu_list = Menu.objects.all().order_by('section')
   tag = Article.objects.get(name=slug)
   return render_to_response ('blog/index.html', {'lista_articoli' : latest_article_list, 'menu' : menu_list, 'slug' : tag})

#URLS.PY
urlpatterns = patterns('',
   ( r'^%s(?P<path>.*)$' %settings.MEDIA_PREFIX[1:],
     'django.views.static.serve',
     {'document_root':settings.MEDIA_ROOT, 'show_indexes':True}),
 
       
    (r'^index/$', 'djangoblog.blog.views.blog_index'),
    (r'^index/(?P<slug>[-\w]+)/$', 'djangoblog.blog.views.blog'),)[/hlpycode]

solo ke nn va!!! :D idee???
« Ultima modifica: Ottobre 21, 2008, 19:35 da ubuntu_of_fortune »

Offline luigitux

  • python unicellularis
  • *
  • Post: 17
  • Punti reputazione: 0
    • Mostra profilo
    • luigitux Blog
Re: url dinamici
« Risposta #1 il: Ottobre 21, 2008, 16:36 »
l'errore che mi dà è:

blog_index() takes exactly 2 arguments (1 given)

ma se nn gli do l'argomento slug nn so come usare la get... :(

Offline ubuntu_of_fortune

  • python sapiens
  • *
  • moderatore
  • Post: 745
  • Punti reputazione: 3
    • Mostra profilo
Re: url dinamici
« Risposta #2 il: Ottobre 21, 2008, 19:30 »
ragazzi mi servirebbe una mano per gli urls di django!!! 

praticamente volevo creare un blog solo ke nn riesco a creare gli url partendo dagli slug...

questa è la mia situazione

[hlpycode]
 
def blog_index(request, slug):
   latest_article_list = Article.objects.all().order_by('-data_pub')[:5]
   menu_list = Menu.objects.all().order_by('section')
   tag = Article.objects.get(name=slug)
   return render_to_response ('blog/index.html', {'lista_articoli' : latest_article_list, 'menu' : menu_list, 'slug' : tag})

#URLS.PY
urlpatterns = patterns('',
   ( r'^%s(?P<path>.*)$' %settings.MEDIA_PREFIX[1:],
     'django.views.static.serve',
     {'document_root':settings.MEDIA_ROOT, 'show_indexes':True}),
 
       
    (r'^index/$', 'djangoblog.blog.views.blog_index'),
    (r'^index/(?P<slug>[-\w]+)/$', 'djangoblog.blog.views.blog'),)[/hlpycode]

Ti ho quotato soltanto la parte che interessa.. praticamente la cosa e' molto semplice :)

Analizza un attimo le r.e. che hai definito nelle urls:
  • Hai definito per un url del tipo: /index invocando la funzione blog_index senza passargli l'argomento slug
  • la seconda r.e. l'hai definita inserendo un campo slug (quello che serve a te) su un url del tipo : /index/<slug> invocando come funzione di callback una certa funzione blog che mi sembra inesistente stando al file views.py che hai postato
:D

Ecco l'errore.. per prima cosa definisci una funzione per l'index che prende solo request come parametro e utilizza la funzione blog_index se gli devi passare SLUG come parametro.

I parametri delle funzioni delle view sono quelli definiti come Named Group (tipo slug per intenderci) - ricapitolando, ogni Named Group definito corrisponde ad un OMONIMO parametro della funzione callback della view richiamata.

Spero di essere stato chiaro :)  :batti5:
« Ultima modifica: Ottobre 21, 2008, 19:32 da ubuntu_of_fortune »

Offline ubuntu_of_fortune

  • python sapiens
  • *
  • moderatore
  • Post: 745
  • Punti reputazione: 3
    • Mostra profilo
Re: Associazione tra URLS e VIEWS in Django
« Risposta #3 il: Ottobre 21, 2008, 19:38 »
Ho ritenuto giusto cambiare il titolo per essere leggermente piu' chiari specificando anche il Framework in oggetto visto che si parla di Web frameworks in generale in questa sezione :party: :D

Offline luigitux

  • python unicellularis
  • *
  • Post: 17
  • Punti reputazione: 0
    • Mostra profilo
    • luigitux Blog
Re: Associazione tra URLS e VIEWS in Django
« Risposta #4 il: Ottobre 21, 2008, 20:09 »
grazie mille...ho trovato l'errore...l'unica cosa ke nn ho capito è cosa intendi per
"I parametri delle funzioni delle view sono quelli definiti come Named Group (tipo slug per intenderci)" ???

Offline luigitux

  • python unicellularis
  • *
  • Post: 17
  • Punti reputazione: 0
    • Mostra profilo
    • luigitux Blog
Re: Associazione tra URLS e VIEWS in Django
« Risposta #5 il: Ottobre 21, 2008, 20:59 »
Se ho capito bene devo creare in views.py prima una funzione per prendere lo slug e poi usare questa funzione per mettere lo slug in una seconda funzione ke poi manderà la richiesta al template...

cioè credo una cosa del genere:

def GetSlug (request, slug):
   tag = Article.objects.get(slug)
   return tag

def blog_index(request):
   latest_article_list = Article.objects.all().order_by('-data_pub')[:5]
   menu_list = Menu.objects.all().order_by('section')
        # inserire lo slug
   return render_to_response ('blog/index.html', {'lista_articoli' : latest_article_list, 'menu' : menu_list})

però nn capisco come devo passare lo slug nella funzione blog_index per poi farlo vedere al file urls.py... :(

Offline ubuntu_of_fortune

  • python sapiens
  • *
  • moderatore
  • Post: 745
  • Punti reputazione: 3
    • Mostra profilo
Re: Associazione tra URLS e VIEWS in Django
« Risposta #6 il: Ottobre 22, 2008, 20:14 »
No il discorso e' ancora piu' semplice di quello che proponevi tu.. forse mi sono spiegato male. Cerco di rispiegarmi con un esempio

[hlpycode]
URLS.py

urlpatterns = patterns('icdbsite.site.views',
    (r'^$', 'view_index'),

    #Urls for categories
    (r'^categories/$', 'categories_view'),
    (r'^categories/(?P<cat_name>.+)/$', 'categories_view'),
    (r'^categories/(?P<cat_name>.+)/(?P<subcat_name>.+)/$', 'sub_categories_view'),
   
)

VIEWS.py

def view_index (request):
    pass

def categories_view (request, cat_name):
    pass

def sub_categories_view (request, cat_name, subcat_name):
    pass

[/hlpycode]

Quindi, ogni funzione di View prende sempre come primo parametro request poi prendono un parametro per ogni Named Group dell'espressione regolare associata definita in urls.py.

Infatti la funzione categories_view prende oltre request un parametro chiamato cat_name esattamente come specificato nell'espressione regolare :
(r'^categories/(?P<cat_name>.+)/$', 'categories_view'),

Quello in grassetto e' il Named Group :D

Chiaro adesso?? Controlla anche l'altra funzione, prende due parametri che si chiamano cat_name e subcat_name come definito nella terza espressione regolare degli urls :)

 :batti5:

Offline luigitux

  • python unicellularis
  • *
  • Post: 17
  • Punti reputazione: 0
    • Mostra profilo
    • luigitux Blog
Re: Associazione tra URLS e VIEWS in Django
« Risposta #7 il: Ottobre 22, 2008, 23:42 »
ok credo di aver capito però mi sfugge ancora una cosa...

se io nelle viste ho questa funzione:

def categories_view (request, slug):
    pass

come fa urls a capire a cosa si riferisce il named group slug???

forse ti sto chiedendo delle cose banali ma sti urls nn riesco proprio a farli girare! :(

Offline ubuntu_of_fortune

  • python sapiens
  • *
  • moderatore
  • Post: 745
  • Punti reputazione: 3
    • Mostra profilo
Re: Associazione tra URLS e VIEWS in Django
« Risposta #8 il: Ottobre 23, 2008, 12:05 »
ok credo di aver capito però mi sfugge ancora una cosa...

se io nelle viste ho questa funzione:

def categories_view (request, slug):
    pass

come fa urls a capire a cosa si riferisce il named group slug???

forse ti sto chiedendo delle cose banali ma sti urls nn riesco proprio a farli girare! :(

I parametri delle regular Expression sono posizionali infatti specificare cat_name e subcat_name significa che l'url deve avere prima il nome della categoria e poi il nome della sottocategoria.

I paramentri delle funzioni di view ovviamente si riferiscono alle posizioni OMOLOGHE delle regual expression quindi, per lo stesso esempio, la funzione di view subcategories_view prende prima cat_name e poi subcat_name (mi riferisco sempre all'esempio che ti ho mostrato un post fa :P)

Nota un'ultima cosa, quando specifichi l'espressione regolare per un URL e identifichi un Named Group, dopo il nome devi identificare il tipo, cioe' come il campo sara' formato.
Nell'esempio infatti nota che dopo il nome e' specificato un .+ ad indicare (il punto) qualsiasi carattere accettato e il + (almeno un carattere).

Il problema cmq resta se non impari qualcosa su come funzionano le espressioni regolari.. mi sa che alla base il tuo problema e' proprio quello :P

Per l'occasione segnalo : http://www.amk.ca/python/howto/regex/ ed inoltre: http://www.amazon.com/Regular-Expression-Pocket-Reference-Expressions/dp/0596514271/ref=sr_1_2?ie=UTF8&s=books&qid=1224756174&sr=1-2 o se preferisci : http://www.ibs.it/code/9788850326655/beri-marco/espressioni-regolari.html di Marco Beri (Pythonista incallito :P)

Offline luigitux

  • python unicellularis
  • *
  • Post: 17
  • Punti reputazione: 0
    • Mostra profilo
    • luigitux Blog
Re: Associazione tra URLS e VIEWS in Django
« Risposta #9 il: Ottobre 23, 2008, 14:54 »
grazie di tutto...vedrò di capire come funzionano bene le espressioni regolari e riproverò! :D

Offline ubuntu_of_fortune

  • python sapiens
  • *
  • moderatore
  • Post: 745
  • Punti reputazione: 3
    • Mostra profilo
Re: Associazione tra URLS e VIEWS in Django
« Risposta #10 il: Ottobre 27, 2008, 11:11 »
grazie di tutto...vedrò di capire come funzionano bene le espressioni regolari e riproverò! :D

Aspetto con ansia i risultati :D

Offline ubuntu_of_fortune

  • python sapiens
  • *
  • moderatore
  • Post: 745
  • Punti reputazione: 3
    • Mostra profilo
Re: Associazione tra URLS e VIEWS in Django
« Risposta #11 il: Novembre 30, 2008, 19:14 »
Allora questi risultati?? :P
Non avrai mica deposto le armi??!!  :question: 8)