[提交时未调用Django视图功能

问题描述 投票:1回答:2

我的views.py中有两个视图函数。第一个呈现index.html第二个是为index.html(update_db)上的表单操作创建的。当我在index.html文件上单击Submit时,它将url更改为/ update1,但是函数调用具有print('HI'),并且在控制台上看不到该内容。运行后也不会创建任何新文件。

最初我已经返回render(request,'index.html',{}),但是我不确定是否应该返回该值。我的urls.py是否有问题?

views.py

from django.shortcuts import render
from django.conf import settings
from .models import Image, Profile
import random
# Create your views here.
def index(request):

    y= random.randint(0,10)
    for i in range(0,10):
        pass 
    p = Image.objects.all()[y]
    print(p.p_img)
    count = p.p_img_count
    lst = [p.s_image1, p.s_image2, p.s_image3, p.s_image3, p.s_image4, p.s_image5]
    tmp =[]
    for i in range(0,3):
        px = Image.objects.all()[random.randint(0,14)]
        tmps=[px.s_image1, px.s_image2, px.s_image3, px.s_image3, px.s_image4, px.s_image5]
        tmp.append(tmps[random.randint(0,4)])

    x = random.randint(0,4)
    s_img = [lst[x]] + tmp
    random.shuffle(s_img)
    print('hevfxy')
    print(p.p_img)

    return render(request,'index.html',{"p_img":p, "s_img": s_img, 'media_url':settings.MEDIA_URL})

def update_db(request):

    print('HI')
    # username = request.user.username
    user = request.POST.get("user")
    p_img = request.POST.get("p_img")
    ans = request.POST.get("ans")

    y = Image.objects.get(p_img=p_img).id
    y=y-8  
    Profile.objects.create(user=user, p_img_id=y, p_ans=ans)

    return something

urls.py(主配置)

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')),


] 

urls.py

from django.conf.urls import url
from django.urls import path

from . import views
app_name ='pair'

urlpatterns = [
    url('/update1', views.update_db, name='update_db'),
    url('$', views.index, name='index'),

]

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>

django forms django-views django-urls
2个回答
0
投票

我认为您的URL是在“ localhost:8000 // update1”而不是“ localhost:8000 / update1”处引用的]

只需更改一下:

url('/update1', views.update_db, name='update_db')

至此:

url('update1', views.update_db, name='update_db')

-1
投票

您可以在views.py中添加任意数量的方法。除非它们返回呈现的html文件,否则我不认为django会将其视为视图。

我的两个赌注是:

  1. 更改url('/update1', views.update_db.as_wiew(), name='update_db'),

  2. 使您的update_db方法返回类似return render(something)的内容。

希望能收到您的来信!

© www.soinside.com 2019 - 2024. All rights reserved.