2016-12-22 3 views
-1

Ich erlebe zwei Form/umleiten Probleme bei der Bereitstellung nur (mit Django), die in Verbindung stehen könnten:Formular Submit-Button nicht funktioniert und immer URL Redirect Fehler

  1. Ich habe ein Formular neue Blog-Beiträge erstellen Wenn Sie auf "Absenden" klicken, werden Sie basierend auf der im Formular ausgewählten Kategorie auf eine URL umgeleitet. In der Produktion funktioniert es gut, aber in der Bereitstellung klicken Sie auf die Schaltfläche Senden, um einen neuen Beitrag zu erstellen, tut nichts (keine Umleitung, bleibt Formular wie es ist, wird nichts an anderer Stelle in der Website hinzugefügt) und nichts erscheint in meinem Fehlerprotokoll. Beachten Sie, dass ich keinen Wert für "action =" in der Formularvorlage festgelegt habe und nicht sicher bin, was (falls überhaupt) ich berücksichtigen sollte, damit ich abhängig von den Werten im Formular weiterhin auf andere Seiten umleiten kann.

  2. Ich kann auch einen Blogbeitrag bearbeiten, der mich auf die Formularseite mit allen ausgefüllten Feldern bringt. Wenn ich einen Wert bearbeite und Submit drücke, aktualisiert es den Blogpost, leitet mich jedoch zu einem Seitenfehler weiter: Not Found: The requested URL /resources/books.views.resources was not found on this server. Wenn Sie die urls.py-Datei auschecken, gibt es nirgendwo die URL "books.views.resources". Bücher ist das, was ich das Modell genannt habe. Ich bin mir nicht sicher, warum dies bei der Bereitstellung hinzugefügt wird.

Würde wirklich irgendwelche Gedanken zu schätzen wissen. Hier ist der relevante Code:

post_edit.html

{% block content %} 
<div id="content"> 
    <div class="padding"> 
     <h1>New post</h1> 
      <form method="POST" class="progresstracker-form">{% csrf_token %} 
      {{ form.as_p }} 
      <button type="submit" class="save btn btn-default">Save</button> 

      </form> 

    </div> 
</div> 
{% endblock %} 

urls.py

urlpatterns = [ 
    url(r'^admin/', include(admin.site.urls)), 
    url(r'^accounts/login/$', django.contrib.auth.views.login, name='login'), 
    url(r'^account/logout$', django.contrib.auth.views.logout, name='logout', kwargs={'next_page': '/'}), 
    url(r'^blogtopics/computer-science/$', views.compsci, name='computer-science'), 
    url(r'^blogtopics/data-science/$', views.datasci, name='data-science'), 
    url(r'^blogtopics/other/$', views.other, name='other'), 
    url(r'^blogtopics/$', views.blogtopics, name='blogtopics'), 
    url(r'^resources/$', views.resources, name='resources'), 
    url(r'^resources/edit/$', views.resources_post_edit, name='resources_post_edit'), 
    url(r'^new/$', views.post_new, name='post_new'), 
    url(r'^progresstracker/$', views.progresstracker, name='progresstracker'), 
    url(r'^blogtopics/(?P<category>[\w-]+)/(?P<slug>[\w-]+)/$', views.bt_detail, name='bt_detail'), 
    url(r'^(?P<category>[\w-]+)/(?P<slug>[\w-]+)/$', views.pt_detail, name='pt_detail'), 
    url(r'^blogtopics/(?P<category>[\w-]+)/(?P<slug>[\w-]+)/edit/$', views.post_edit, name='bt_post_edit'), 
    url(r'^(?P<category>[\w-]+)/(?P<slug>[\w-]+)/edit/$', views.post_edit, name='pt_post_edit'), 
    url(r'^drafts/$', views.post_draft_list, name='post_draft_list'), 
    url(r'^blogtopics/(?P<category>[\w-]+)/(?P<slug>[\w-]+)/remove/$', views.post_remove, name='bt_post_remove'), 
    url(r'^(?P<category>[\w-]+)/(?P<slug>[\w-]+)/remove/$', views.post_remove, name='pt_post_remove'), 
    url(r'^blogtopics/(?P<category>[\w-]+)/(?P<slug>[\w-]+)/publish/$', views.post_publish, name='bt_post_publish'), 
    url(r'^(?P<category>[\w-]+)/(?P<slug>[\w-]+)/publish/$', views.post_publish, name='pt_post_publish'), 
] 

views.py

def resources(request): 
    post = get_object_or_404(Post, slug='resources') 
    return render(request, 'blog/resources.html', {'post': post}) 

@login_required 
def post_new(request): 
    if request.method == "POST": 
     form = PostForm(request.POST) 
     if form.is_valid(): 
      post = form.save(commit=False) 
      post.author = request.user 
      post.save() 
      if post.category == 'progresstracker': 
       return redirect('books.views.pt_detail', slug=post.slug, category=post.category) 
      elif post.category == 'resources': 
       return redirect('books.views.resources') 
      else: 
       return redirect('books.views.bt_detail', slug=post.slug, category=post.category) 
    else: 
     form = PostForm() 
    return render(request, 'blog/post_edit.html', {'form': form}) 

@login_required  
def post_edit(request, slug, category): 
    post = get_object_or_404(Post, slug=slug, category__slug=category) 
    if request.method == "POST": 
     form = PostForm(request.POST, instance=post) 
     if form.is_valid(): 
      post = form.save(commit=False) 
      post.author = request.user 
      post.save() 
      if post.category == 'progresstracker': 
       return redirect('books.views.pt_detail', slug=post.slug, category=post.category) 
      elif post.category == 'resources': 
       return redirect('books.views.resources') 
      else: 
       return redirect('books.views.bt_detail', slug=post.slug, category=post.category) 

    else: 
     form = PostForm(instance=post) 
    return render(request, 'blog/post_edit.html', {'form': form}) 

@login_required 
def resources_post_edit(request): 
    post = get_object_or_404(Post, slug='resources') 
    if request.method == "POST": 
     form = PostForm(request.POST, instance=post) 
     if form.is_valid(): 
      post = form.save(commit=False) 
      post.author = request.user 
      post.save() 
      return redirect('books.views.resources') 
    else: 
     form = PostForm(instance=post) 
    return render(request, 'blog/post_edit.html', {'form': form}) 

Antwort

1

Fo r # 1, überprüfe, wo - welche Ansicht - das eingereichte Formular bearbeitet und was dort passiert.

Für # 2, In redirect() Funktionsaufruf in Ihren Ansichten, verwenden Sie Namen in urls.py anstelle von Python wie Ansicht Anruf definiert.

Zum Beispiel haben Sie

return redirect('books.views.bt_detail', slug=post.slug, category=post.category) 

Statt

verwenden
return redirect('bt_detail', slug=post.slug, category=post.category) 
#---------------^ 
+0

Dieser den Trick für # 2 - danke! Für # 1 stelle ich fest, dass es nur ein Problem ist, wenn ich einen neuen Beitrag erstelle - wenn ich einen existierenden Beitrag bearbeite, funktioniert der Submit Button richtig (speichert und leitet weiter). Aber ich sehe nichts in der oben geposteten "post_new" -Ansicht, die aus dem Gleichgewicht geraten ist. – Andrew