可变形式action =“ /”

时间:2019-08-21 08:06:43

标签: django django-forms

有一个Web应用程序可从不同站点收集数据。主页上的表单以两个字段的形式显示,您可以在其中几种语言和城市中进行选择。当您按下搜索按钮时,仅显示一对语言和城市的结果,而与表单中选择的变体无关,因为action ='''表单中只有一个URL。如何动态更改表单action ='',具体取决于主页上表单的变体选择。我希望我已经清楚地解释了。谢谢您的帮助!

https://ibb.co/VNcQqDp截图

models.py

from django.db import models

class Page(models.Model):
    language = models.CharField(max_length=100)
    city = models.CharField(max_length=100)


    def __str__(self):
        return self.language

views.py

from django.shortcuts import render, redirect
from .forms import PageForm
from page.parsers.kiev_python_parser import *
from page.parsers.kiev_javascript_parser import *
from page.parsers.kiev_java_parser import *
from page.parsers.kiev_c_parser import *


def index_page(request):
    form = PageForm()
    return render(request, 'page/index_page_form.html', context= 
{'form':form})


def kiev_python(request):
    kiev_python_main()
    return render(request, 'page/kiev_python_result.html', context= 
{'workua_data': workua_data, 'rabotaua_data':rabotaua_data})


def kiev_javascript(request):
    kiev_javascript_main()
    return render(request, 'page/kiev_javascript_result.html', 
 context={'workua_data': workua_data, 'rabotaua_data':rabotaua_data})


def kiev_java(request):
     kiev_java_main()
     return render(request, 'page/kiev_java_result.html', context= 
{'workua_data': workua_data, 'rabotaua_data':rabotaua_data})


 def kiev_c(request):
     kiev_c_main()
     return render(request, 'page/kiev_c_result.html', context= 
 {'workua_data': workua_data, 'rabotaua_data':rabotaua_data})

forms.py

from django import forms
from django.forms import ModelForm

from .models import Page

class PageForm(forms.ModelForm):
    class Meta:
        model = Page
        fields = ['language', 'city']

        lang_options = [
            ('1', 'Python'),
            ('2', 'Javascript'),
            ('3', 'Java'),
            ('4', 'C#'),
        ]


         city_options = [
              ('1', 'Киев'),
         ]

         language = forms.ChoiceField(required=True, choices=lang_options)
          city = forms.ChoiceField(required=True, choices=city_options)

index_page_form.html

{% extends 'base.html' %}

{% block title %}
    Main page
{% endblock %}

{% block content %}
     <h1 class="mt-5 mb-5 text-center">Сервис поиска работы</h1>
     <p class="text-center">Это веб приложение позволяет осуществить поиск вакансий для программистов с популярнейших ресурсов работодателей Украины</p>

<form action="/" method="post" class="mt-5 mb-5 text-center">
    {% csrf_token %}

    <div class="form-row">
        <div class="form-group col-md-6">
            <label for="language-field">Выберите язык:</label>
            <select class="form-control" name="language" id="language-field">
                <option name="kiev_python" value="1">Python</option>
                <option name="kiev_javascript" value="2">Javascript</option>
                <option name="kiev_java" value="3">Java</option>
                <option name="kiev_c" value="4">C#</option>
            </select>
        </div>

        <div class="form-group col-md-6">
            <label for="city-field">Выберите город:</label>
            <select class="form-control" name="city" id="city-field">
                <option value="1">Киев</option>
            </select>
        </div>
    </div>

    <button class="btn btn-outline-primary btn-block mt-3" type="submit">Поиск</button>
</form>
{% endblock %}

urls.py

 from django.urls import path

 from .views import *


urlpatterns = [
    path('', index_page, name='index_page_url'),
    path('result/kiev_python/', kiev_python, name='kiev_python_url'),
    path('result/kiev_javascript/', kiev_javascript, name='kiev_javascript_url'),
    path('result/kiev_java/', kiev_java, name='kiev_java_url'),
    path('result/kiev_c_sharp/', kiev_c, name='kiev_c_url'),

]

1 个答案:

答案 0 :(得分:0)

您使用的是django模板,因此可以使用动态上下文的标签。像这样:

form action="/{{ your_path}}" method="post" class="mt-5 mb-5 text-center">