2011-06-27 9 views
0

Je ne sais pas exactement comment dire cela, mais voilà. J'ai plusieurs points de vue que mon urls.py ne semble pas du tout arriver, et je ne sais pas pourquoi. Je suis nouveau à django et avoue être un peu perplexe quant à la façon dont cela fonctionne.URLs et vues dans DJANGO

Dans mon modèle, j'ai:

<ul> 
    <li><a href="/project/{{project.slug}}/tickets/create">Create Ticket</a></li> 
    <li><a href="/project/{{ project.slug }}/tickets/edit">Edit Ticket</a></li> 
    <li><a href="/project/{{ project.slug }}/tickets/delete">Delete Ticket</a></li> 
</ul> 

Dans mon urls.py:

(r'^ticket/(?P<ticket_id>\d+)$', views.editTicket), 
(r'^(?P<project_slug>[^\.^/]+)/tickets/create$', views.createTicket), 
(r'^(?P<project_slug>[^\.^/]+)/tickets/(?P<ticket_id>\d+)$', views.deleteTicket), 

Dans mon views.py:

def createTicket(request, project_slug): 
    project = Project.objects.get(slug=project_slug) 
    form = None 
    if request.method == 'POST': 
     t = Ticket(created_by=request.user, assigned_to=request.user) 
     form = TicketCreateForm(request.POST, instance=t) 
     if form.is_valid(): 
      comment = Comment(user=request.user, body=request.POST.get("description", ""), subject="") 
      comment.save() 
      t.description = comment 
      form.save() 
      return HttpResponseRedirect("/project/ticket/%d" % t.pk) 
    else: 
     form = TicketCreateForm(instance=Ticket(project=project, assigned_to=request.user)) 
    payload = { 'project':project, 'form':form } 
    return render(request, 'project/ticket_add.html', payload) 

def editTicket(request, ticket_id): 
    ticket = Ticket.objects.get(pk=ticket_id) 
    if request.method == 'POST': 
     form = TicketCreateForm(request.POST, instance=ticket) 
     if form.is_valid(): 
      form.setComment(Comment(parent=ticket.description, user=request.user, body=request.POST.get("comment", " "))) 
      form.save() 
    form = TicketCreateForm(instance=ticket) 
    payload = { 'project':ticket.project, 'ticket':ticket, 'ticket_form':form } 
    return render(request, 'project/ticket.html', payload) 

def deleteTicket(request, ticket_id): 
    ticket = Ticket.objects.get(pk=ticket_id) 
    ticket.delete() 
    redirect_to = 'project/tickets.html' 
    return HttpResponseRedirect(redirect_to) 

def editTicket(request, ticket_id): 
    ticket = Ticket.objects.get(pk=ticket_id) 
    if request.method == 'POST': 
     form = TicketCreateForm(request.POST, instance=ticket) 
     if form.is_valid(): 
      form.setComment(Comment(parent=ticket.description, user=request.user, body=request.POST.get("comment", " "))) 
      form.save() 
    form = TicketCreateForm(instance=ticket) 
    payload = { 'project':ticket.project, 'ticket':ticket, 'ticket_form':form } 
    return render(request, 'project/ticket.html', payload) 

Qu'est-ce que je fais mal ici? Quelqu'un peut-il aider?

+0

"J'ai plusieurs vues que mon urls.py ne semble pas atteindre du tout". Qu'est-ce que vous voulez dire? Quelles actions prenez-vous et quelles erreurs/comportements inattendus obtenez-vous? –

+0

Regarde assez près de moi, je passerais en revue les tutoriels (https://docs.djangoproject.com/en/dev/intro/tutorial03/) sur le site Web de Django. Si vous avez envoyé des messages d'erreur spécifiques, cela peut vous aider. Je pense que vous êtes assez proche cependant. De plus, le canal django irc sur freenode est vraiment très bon. –

+0

Doc, merci. Je ne reçois aucune erreur, malheureusement. Au lieu de cela, j'ai beaucoup de "rien" qui se passe où les choses devraient être. – DesiredDesigns

Répondre

1

Il y a plusieurs problèmes ici,

En premier lieu, sauf si vous avez modifié les paramètres connexes, il est préférable d'ajouter un/à la fin de votre URL, d'autant plus que vous incluez $ dans votre regexps URL et django peut rediriger pour ajouter une barre oblique finale à votre adresse.

Deuxièmement, votre fonction deleteTicket, prend request et ticket_id comme arguments, alors qu'il a besoin de 3 selon votre expression rationnelle, project_slug manque.

3ème, <a href="/project/{{ project.slug }}/tickets/delete">Delete Ticket</a> simplement ne correspondra pas (r'^(?P<project_slug>[^\.^/]+)/tickets/(?P<ticket_id>\d+)$', views.deleteTicket),, puisqu'il n'y a aucun signe d'un ticket_id. 4ème (et sans rapport avec le problème correspondant), vous supprimez un objet via une requête HTTP GET qui peut ne pas être une bonne idée (par exemple, il peut être mis en cache ou les moteurs de recherche peuvent essayer de le frapper). Appelant également Ticket.objects.get(pk=ticket_id) peut déclencher une exception, essayez get_object_or_404(Ticket, pk=ticket_id) qui est plus susceptible de faire ce que vous voulez. C'est au from django.shortcuts import get_object_or_404.

Si cela ne fonctionne pas, essayez d'afficher la source HTML de celle qui apparaît dans le modèle (avec les valeurs placées au lieu de {{project.slug}}) afin de pouvoir effectuer d'autres vérifications.

J'espère que cela vous aide.

+0

Merci Darioush ... J'ai essayé quelque chose pour intentionnellement jeter une erreur afin que je puisse essayer de savoir ce qui se passe ... Voici ce qui s'est passé ... J'ai cliqué sur un lien qui aurait dû invoquer la "suppression" , au lieu de cela j'ai eu une erreur d'une vue avec laquelle je n'essaie même pas de travailler ... Je suis confus quant à la raison pour laquelle cela est arrivé? – DesiredDesigns

+0

Vous devez adhérer aux 1er et 3e conseils. Si vous l'avez déjà fait, quelle est l'erreur? – Darioush

+0

DoesNotExist à/project/test-project1/tickets/delete à partir de comment.Importer des modèles Commentaire de fichiers .models import * de .forms import * des pages import * de svnrepos import * def showProject (demande, project_slug): \t projet = Project.objects.get (limaces = project_slug) ... \t billets = Ticket.objects.filter (projet = projet) \t charge utile = { 'projet': projet 'tickets': billets} \t retour render (demande, 'projet/project.html', charge utile) def editProject (demande, project_slug): projet = Project.objects.get (slug = project_slug) – DesiredDesigns