2017-10-15 13 views
0

J'ai créé un formulaire et une vue dans Django. Je peux voir le nouveau formulaire d'ajout quand je vais à http://localhost:8000/post/new/ mais après avoir complété tous les champs obligatoires et cliqué sur Soumettre la page se rafraîchit tout seul et je ne suis pas redirigé vers la page des détails du post.La vue Django ne redirige pas vers la page de détails

Voici mon views.py

def post_new(request): 
    if request.method == "POST": 
     form = PostForm(request.POST, request.FILES) 
     if form.is_valid(): 
      post = form.save(commit=False) 
      post.createdAt = timezone.now() 
      post.writer = request.user 
      post.save() 
      return redirect('posts:post_detail', pk=post.pk) 
    else: 
     form = PostForm() 
    context = {'form':form} 
    return render(request,"posts/post_new.html",context) 

Voici mon urls.py:

urlpatterns = [ 
    url(r'^$', views.post_list, name="post_list"), 
    url(r'^posts/(?P<post_title_slug>[\w\-]+)/$', views.post_detail, name='post_detail'), 
    url(r'^post/new/$', views.post_new, name='post_new'), 
] 

Voici mon html:

<div class="col"> 
<form method='POST' class='post_form' enctype='multipart/form-data'> 
    {% csrf_token %} 
    {{ form.non_field_errors }} 
    <div class="form-row"> 
    <div class="form-group col-md-6"> 
     <label for="{{ form.title.id_for_label }}" class="col-form-label">Title</label> 
     <input type="text" class="form-control" id="{{ form.title.id_for_label }}" name= "{{ form.title.html_name }}" placeholder="Enter post title"> 
     {{ form.title.errors }} 
    </div> 
    </div> 
    <div class="form-group"> 
    <label for="{{ form.comment.id_for_label }}">Description here:</label> 
    <textarea class="form-control" rows="5" id="{{ form.comment.id_for_label }}" name="{{ form.comment.html_name }}" aria-describedby="descriptionHelpBlock"></textarea> 
    <small id="descriptionHelpBlock" class="form-text text-muted"> 
     Describe your post in this text box. 
    </small> 
    {{ form.comment.errors }} 
    </div> 

    <div class="form-group"> 
    <label for="{{ form.image.id_for_label }}">Upload picture here</label> 
    <input type="file" id="{{ form.image.id_for_label }}" name="{{ form.image.html_name }}" class="form-control-file"> 
    {{ form.image.errors }} 
    </div> 
    <br> 
    <button type="submit" class="btn btn-info">Post</button> 
</form> 

+0

est-il votre message se crée sans problème? –

+0

Malheureusement, le message n'est pas créé dans le db non plus – MaxRah

+0

Si la publication n'est pas créée - il semble que la forme n'est pas valide. Je suggère d'imprimer 'form.errors' complètement pour voir ce qui est faux ou manquant. – Igor

Répondre

1

Votre URL attend une limace valeur comme argument. Vous devez passer le slug de titre de la poste dans rediriger au lieu de pk. Essayez:

return redirect('posts:post_detail', post_title_slug=post.slug) 

Je suppose votre champ slug comme post.slug

+0

J'ai changé la redirection à ceci et toujours le même résultat – MaxRah

+0

Semble votre formulaire n'est pas valide. Essayez d'ajouter ** {{form.errors}} ** n'importe où dans votre modèle et essayez à nouveau de soumettre votre formulaire. –