django,直接查看另一个 html 页面

萨沙

我正在使用 Django 开发网站。该网站旨在用于搜索存储在 MySQL 数据库中的信息。

这是网站当前的基本流程。1) index.html - 这有一个表单来选择一个选项 2) 根据选项,用户将重定向到 search.html (包含一个表单) 3) 一旦用户提供了条件,结果将显示在 reply.html 中

在我的 views.py 中,我有两个功能。

from django.shortcuts import render
from website.models import WebsiteRepository
from .forms import SearchForm
from .forms import SelectTypeForm


def Search(request):
if request.method == 'POST':
    #do something
    return render(request, 'reply.html', {'env_dict':env_dict})
else:
    #do something
    return render(request, 'search.html', context = context)

def index(request):

if request.method =='POST':
   #do something
   return render(request, 'search.html', context = context) 
else:
    #do something
    return render(request, 'index.html', context= context)  

当我转到 index.html 页面时,我可以选择一个选项,它会将我定向到 search.html。之后,我在那里填写表格并提交,它不会给我reply.html页面。

我有一种感觉,我可以通过更改 urls.py 来完成这项工作。

from django.urls import path
from website import views


 urlpatterns = [
      path('', views.index, name='index'),
      #path('search/', view.Search, name ='Search')

 ]

我试着谷歌一下。但它的细节太多,我有点迷失了。

你们中有人知道如何实现这一目标吗?

谢谢

搜索.html

{% extends "base_generic.html" %}
{% block content %}

   <h3>Welcome to search information Repository</h3>
   <form method="post">
   {% csrf_token %}
   {{form.as_p}}
   <button type = 'submit'>submit</button>
   </form>

{% endblock %} 

索引.html

{% block content %}
   <h3>Welcome to information Repository</h3>
       <form method="post">
       {% csrf_token %}
       {{form.as_p}}
    <button type = 'submit'>submit</button>
  </form>

只是为了澄清事情,我也添加了 forms.py

from django import forms
from .models import  WebsiteRepository

class SearchForm(forms.Form):
   websiterepository = WebsiteRepository


   env_indicators =  websiterepository.objects.filter (key_aspect='Environmental').values_list('repo_id','indicator')
   indicator = forms.ChoiceField(choices=env_indicators,label = 'Indicator'      )


  OPTIONS = (('2000','2000'),('2001','2001'),('2002','2002'), ('2003','2003'),('0000','0000'),)
   year = forms.ChoiceField(choices=OPTIONS)





class SelectTypeForm(forms.Form): 

      OPTIONS = (('1', 'Envirnmental Indicators'),('2','Economic Indicators'),('3','Social Indicators'),)
      types = forms.ChoiceField(choices=OPTIONS)
布鲁诺·德舒利耶

您的代码在很多方面都是错误的。

首先:对于搜索,您需要 GET 请求,而不是 POST(POST 用于更新服务器的状态 - 主要是添加或更新您的数据库)。这是语义上正确的方法(因为您想要 GET 数据),它将允许用户为 url 添加书签。

第二点:您不想将搜索表单提交给索引视图,而是提交给搜索视图。不需要重定向等,只需使用{% url %}模板标签来填充action表单属性(您当然需要在 urls.py 中有一个“搜索”网址):

<form method="get" action="{% url 'Search' %}">
   {% csrf_token %}
   {{form.as_p}}
   <button type = 'submit'>submit</button>
  </form>

如果您想在多个页面上使用此表单(搜索表单通常是这种情况),请使用包含标签,它将负责创建未绑定的 SearchForm 并呈现模板片段。

那么在你的搜索视图中,你只想要 GET 请求,并且不要使用两个不同的模板,这只会导致无用的重复。

def Search(request):
    form = SearchForm(request.GET)
    # use the form's data - if any - to get search results 
    # and put those results (even if empty) in you context 
    return render(request, 'reply.html', {'env_dict':env_dict})

最后,您的搜索表单完全损坏了:

class SearchForm(forms.Form):
   # this is totally useless
   websiterepository = WebsiteRepository

   # this will only be evaluated once at process startup, so you will
   # get stale data in production - and probably different data
   # per process, in a totally unpredictable way.
   # You need to either put this in the form's __init__ or wrap it
   # in a callable and pass this callable

   env_indicators =  websiterepository.objects.filter (key_aspect='Environmental').values_list('repo_id','indicator')
   indicator = forms.ChoiceField(choices=env_indicators,label = 'Indicator'      )



  # are you going to manually add a new year choice every year ???
  OPTIONS = (('2000','2000'),('2001','2001'),('2002','2002'), ('2003','2003'),('0000','0000'),)
   year = forms.ChoiceField(choices=OPTIONS)

对于“指标”ChoiceField,您需要以下内容:

def get_indicators_choices():
    return Websiterepository.objects.filter (key_aspect='Environmental').values_list('repo_id','indicator')

class SearchForm(forms.Form):
   # IMPORTANT  : we are NOT calling the function here, just
   # passing it (python functions are objects) to the field, which
   # will call it everytime the form is instanciated, so you don't
   # have stale data
   indicator = forms.ChoiceField(
        choices=get_indicator_choices, 
        label='Indicator')

最后一点:与您的命名保持一致(即为什么要在所有较低的 ( index) 中命名一个视图并将另一个大写 ( Search) ?无论您选择哪种约定(我强烈建议在此处尊重 pep8),至少在整个项目中坚持它.

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

从另一个页面抓取HTML

来自分类Dev

如何从另一个HTML页面调用表格

来自分类Dev

querySelectorAll()从另一个页面转换为html

来自分类Dev

重定向到另一个HTML页面

来自分类Dev

用HTML打开另一个页面

来自分类Dev

Django 站点创建从 html 页面到另一个应用程序的主 html 页面的链接

来自分类Dev

如何从另一个HTML页面获取HTML页面的内容?

来自分类Dev

在父HTML页面的iframe中显示另一个html页面

来自分类Dev

jQuery将外部HTML页面<title>插入另一个HTML页面

来自分类Dev

如何将html页面作为另一个html页面的基础?

来自分类Dev

如何访问主html页面到另一个html页面?

来自分类Dev

如何从一个HTML页面到另一个HTML页面进行功能?

来自分类Dev

使用一个html页面的下拉列表到另一个html页面

来自分类Dev

将一个HTML页面加载到另一个HTML页面中作为弹出窗口

来自分类Dev

如何在另一个HTML页面中的一个HTML页面中调用函数

来自分类Dev

如何转到另一个html页面并自动单击一个按钮?

来自分类Dev

将一个 HTML 表格复制到另一个页面

来自分类Dev

如何将数据从html页面传递到另一个页面?

来自分类Dev

使用 Jquery 将另一个 url 加载到 html 页面加载相同的页面

来自分类Dev

如何使用angularjs将参数从html页面发送到另一个页面

来自分类Dev

Django:HTML表单提交给调用函数并重定向到另一个页面

来自分类Dev

将 javascript 对象变量从一个 HTML 页面传递到另一个页面

来自分类Dev

如何在另一个页面中包含一个 html 页面并使其内容可抓取

来自分类Dev

如何将数据从一个 html 页面传递到另一个页面?

来自分类Dev

我需要使用JavaScript或HTML链接到当前HTML页面内的另一个HTML页面

来自分类Dev

如何在另一个HTML页面中呈现HTML部分?

来自分类Dev

将html页面代码包含到另一个[html]文件中

来自分类Dev

我无法使用Angularjs在index.html中包含另一个html页面

来自分类Dev

仅使用 html 和 javascript 重定向到另一个 html 页面

Related 相关文章

  1. 1

    从另一个页面抓取HTML

  2. 2

    如何从另一个HTML页面调用表格

  3. 3

    querySelectorAll()从另一个页面转换为html

  4. 4

    重定向到另一个HTML页面

  5. 5

    用HTML打开另一个页面

  6. 6

    Django 站点创建从 html 页面到另一个应用程序的主 html 页面的链接

  7. 7

    如何从另一个HTML页面获取HTML页面的内容?

  8. 8

    在父HTML页面的iframe中显示另一个html页面

  9. 9

    jQuery将外部HTML页面<title>插入另一个HTML页面

  10. 10

    如何将html页面作为另一个html页面的基础?

  11. 11

    如何访问主html页面到另一个html页面?

  12. 12

    如何从一个HTML页面到另一个HTML页面进行功能?

  13. 13

    使用一个html页面的下拉列表到另一个html页面

  14. 14

    将一个HTML页面加载到另一个HTML页面中作为弹出窗口

  15. 15

    如何在另一个HTML页面中的一个HTML页面中调用函数

  16. 16

    如何转到另一个html页面并自动单击一个按钮?

  17. 17

    将一个 HTML 表格复制到另一个页面

  18. 18

    如何将数据从html页面传递到另一个页面?

  19. 19

    使用 Jquery 将另一个 url 加载到 html 页面加载相同的页面

  20. 20

    如何使用angularjs将参数从html页面发送到另一个页面

  21. 21

    Django:HTML表单提交给调用函数并重定向到另一个页面

  22. 22

    将 javascript 对象变量从一个 HTML 页面传递到另一个页面

  23. 23

    如何在另一个页面中包含一个 html 页面并使其内容可抓取

  24. 24

    如何将数据从一个 html 页面传递到另一个页面?

  25. 25

    我需要使用JavaScript或HTML链接到当前HTML页面内的另一个HTML页面

  26. 26

    如何在另一个HTML页面中呈现HTML部分?

  27. 27

    将html页面代码包含到另一个[html]文件中

  28. 28

    我无法使用Angularjs在index.html中包含另一个html页面

  29. 29

    仅使用 html 和 javascript 重定向到另一个 html 页面

热门标签

归档