簡體   English   中英

Django按鈕重定向錯誤

[英]Django button redirection errors

我的網頁應顯示一系列稱為“視圖”的帖子(文本)。 我希望用戶能夠單擊該視圖的“ update_button”(稱為v)並定向到該頁面。 我在下面提供了一個鏈接,該鏈接應該與按鈕完全一樣。 該鏈接將重定向到正確的頁面,盡管該按鈕顯然具有與鏈接相同的操作,但仍將其重定向到一個完全不同的頁面。 這種行為極為奇怪。 如果我將表單操作中的v.pk替換為9,那么它將正確地將我重定向到主鍵9。但是,如果我再次用v.pk替換硬編碼的9,然后單擊按鈕(對於pk = 9的帖子),它將重定向我到pk = 7(該用戶實際上可以更新的帖子的最低pk),但這是錯誤的pk,當我將print(pk)放在查看它打印7,而不是9,因此鏈接中放置的值實際上不是v.pk。 更奇怪的是,當我檢查按鈕上的元素時,我看到了正確鏈接。 如果我將此鏈接剪切並粘貼到地址欄中,將被重定向到正確的頁面。 就像按鈕已損壞,同時與inspect元素正確顯示一樣。

{% extends "uv/base.html" %}

{% block content %}
    <h1>View List</h1>

    {% if view_c_list %}
    <ul>

      {% for v in view_c_list %}
      <li>
        Title: <a href = "{% url 'uv:view_C_info' v.pk %}">{{v.title}}</a></br>
        Author: {{v.author}} </br>
        Piece: {{v.view_text}}
        {% if user == v.author %}
        <form action="{% url 'uv:view_C_delete' v.pk %}" method="POST">
            {% csrf_token %}            
            <input type="submit" id="delete_button" value="delete">
        </form>
        <form action="{% url 'uv:view_C_update' v.pk %}" id="update">
            {% csrf_token %}
            <input type="submit" id="update_button" value="update_{{v.pk}}" form="update">
        </form>
        <a href = "{% url 'uv:view_C_update' v.pk %}"> Update </a>
        {% endif %}
      </li>
      {% endfor %}    
    </ul>
    {% else %}
      <p>That's all folks.</p>
    {% endif %}       
{% endblock %}

urls.py

    from django.urls import path
    from django.conf.urls import url
    from django.contrib import admin
    from django.contrib.auth import views as auth_views
    from . import views
    app_name = 'uv'
    urlpatterns = [
        path('view_leaderboards/',views.view_leaderboards,name='view_leaderboards'),
        path('view/<int:pk>/add_review/',views.add_review,name="add_review"),
        path('view/<int:pk>/update_substars/',views.update_substars,name='update_substars'),
        path('profile/',views.home, name = 'home'),
        path('login/', auth_views.login, name='login'),
        path('logout/', auth_views.logout,{'next_page': '/uv/home/'},name='logout'),
        path('admin/',admin.site.urls),
        path('signup/', views.signup, name='signup'),
        path('home/', views.home, name='home'),
        path('create/', views.View_C_Create.as_view(), name='view_c_create'),
        #path('view/<int:pk>/update/', views.View_C_Update.as_view(), name = 'view_C_update'),
        path('view/<int:pk>/update/', views.view_C_Update, name = 'view_C_update'),
        path('view/<int:pk>/delete/', views.view_C_Delete, name='view_C_delete'),
        path('review/<int:pk>/update/', views.Review_Update.as_view(), name = 'review_update'),
        path('review/<int:pk>/delete/', views.Review_Delete, name='review_delete'),
        path('views/',views.View_C_List.as_view(), name = 'view_C_detail'),
        path('view/<int:pk>/',views.View_C_info, name='view_C_info'),
        path('add_view_from_home',views.add_view_from_home, name = 'add_view_from_home'),


    ]

views.py

class View_C_Update_Form(forms.ModelForm):
        title = forms.TextInput( )#widget=forms.Textarea(attrs={'rows':2, 'cols':15,'value':'Title'}) )
        title.render('title','The title')
        view_text = forms.CharField( widget=forms.Textarea(attrs={'rows':10, 'cols':60  }))
        def __init__(self, *args, **kwargs):
            super(View_C_Update_Form, self).__init__(*args, **kwargs)
            #self.fields['title'].initial = 'This is default text.'
class View_C_List(ListView):
    model = View_C
 <form action="{% url 'uv:view_C_update' v.pk %}" id="update">{% csrf_token %}<input type="submit" id="update_button" value="update_{{v.pk}}" form="update"></input></form>

我應該為每個視圖創建一個唯一的表單ID(將pk附加到該視圖),然后按鈕將不會全部附加到一個表單。

如您所見,我使用了form =“ update”。 對於for循環中的每個單個按鈕都可以完成此操作。 因此很明顯,他們現在都指向同一個表單動作,這顯然是不希望的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM