单击submit时未调用Django view函数
我的views.py中有两个视图函数。第一个呈现index.html 第二个是为index.html update_db上的表单操作创建的。当我在index.html文件上单击submit时,它将url更改为/update1,但函数调用有print'HI',我在控制台上看不到。运行后也不会创建任何新文件。 最初我返回了renderrequest,{},但我不确定是否应该返回它。 我的URL.py有问题吗 views.py url.py主配置文件单击submit时未调用Django view函数,django,forms,django-views,django-urls,Django,Forms,Django Views,Django Urls,我的views.py中有两个视图函数。第一个呈现index.html 第二个是为index.html update_db上的表单操作创建的。当我在index.html文件上单击submit时,它将url更改为/update1,但函数调用有print'HI',我在控制台上看不到。运行后也不会创建任何新文件。 最初我返回了renderrequest,{},但我不确定是否应该返回它。 我的URL.py有问题吗 views.py url.py主配置文件 from django.conf.urls im
from django.conf.urls import url, include
from django.urls import path
from django.contrib import admin
from django.contrib.auth import views as auth_views
from django.conf.urls.static import static
from django.conf import settings
urlpatterns = static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) + [
url(r'^admin/', admin.site.urls),
url(r'^login/$', auth_views.LoginView.as_view(template_name="login.html"), name="login"),
url(r'^logout/$', auth_views.LogoutView.as_view(template_name="logout.html"), {'next_page': '/'}, name='logout'),
url('^', include('pair.urls')),
]
url.py
index.html
<form action="/update1" method="POST" >
{% csrf_token %}
Player : <b> {{ user.get_username }} </b>
<p style="background-color: #ddd674">Primary image :
<input type="hidden" name="user" id="{{ user.get_username }}" value="{{ user.get_username }}"></input>
<input type="hidden" name="p_img" id="{{ p_img.p_img }}" value="{{ p_img.p_img }}"><img id="p_img" src="{{media_url}}{{ p_img.p_img }}" height=300px ></input>
</p>
<hr height=2px >
<p style="background-color: #a7e0d9">Secondary image :
{% for img in s_img %}
{% if img %}
<input type="radio" id="{{ img }}" name="ans" value="{{ img }}" >
<img src="{{media_url}}{{ img }}" height=250px >
</input>
{% endif %}
{% endfor %}
<br>
</p>
<hr>
{{ ans }}
<input type="submit" value="Submit" />
</form>
我认为您的URL是在localhost:8000//update1处引用的,而不是在localhost:8000/update1处引用的 只要改变一下:
url('/update1', views.update_db, name='update_db')
为此:
url('update1', views.update_db, name='update_db')
可以在views.py中添加任意数量的方法。除非他们返回一个渲染的HTML文件,否则我不认为Django会把它们看作是视图。 我的两个赌注是: 更改url'/update1',views.update_db.as_wiew,name='update_db' 使update_db方法返回类似于returnrendersomething的内容
希望收到你的来信 您在控制台中看到的错误是什么?@Abhyudai没有错误。只是def indexrequest中有一个print语句,它会在控制台上打印,甚至在单击submit之后。。索引视图在地址栏更改为/update1时称为url,但未打印“HI”,这意味着url文件存在问题。它将请求定向到索引函数。尝试删除path for index函数中的$。仍然不起作用。即使我认为问题出在url.py文件中,但我已经尝试过改变顺序、编写URL的方式、删除和添加斜杠,但仍然没有调用update_db。我想知道的另一件事是,通过index和update_db函数返回renderrequest,index.html是否可以。是的,您可以为这两个函数返回相同的模板,但从逻辑上讲,您可能希望在您的情况下使用将不同的数据传递到templates index.html,否则,使用两个不同的函数是没有意义的。print语句在任何情况下都应该工作,但实际上不行。所以可能还有其他一些问题。您如何确定调用了该方法?这可能是这里的问题。如果没有按照原始海报的当前状态调用它,我猜您的赌注将无法解决这些问题。原始海报正试图通过url访问该方法,但失败了。我的赌注是基于django由于我的赌注而无法将该方法识别为视图。因此,print语句在这种情况下不能工作,对吗?实际上,我只想在单击submit按钮之后呈现index.html。Update_db用于将函数中请求的值存储在函数中。我最初返回了renderrequest'index.html',但它仍然不会打印'HI',表明它没有被调用,这就是为什么我不确定rendering index.html是否是问题所在。单击submit时,URL会更改为localhost:8000/update1,带斜杠和不带斜杠,但控制台中不会打印'HI'。
url('/update1', views.update_db, name='update_db')
url('update1', views.update_db, name='update_db')