【问题标题】:Django How do i pass the url parameter with the form button?Django 如何使用表单按钮传递 url 参数?
【发布时间】:2019-02-06 12:38:06
【问题描述】:

嗨,我是 django 的新手,我阅读了 django 文档,但我创建了一个带有参数的 url,我想预订一辆车。预订时我需要汽车 ID 和司机 ID。重定向到我的预订页面后。我的 book now 按钮没有发送司机 ID 和汽车 ID。请帮我。 例如。 我有一个约翰作为司机,他点击奥迪预订。获得他的网址后,我想将其保存到我的预订数据库中。单击我的html“立即预订”中的按钮后,它不会呈现到下一页预订汽车,也不会获得汽车ID和驾驶员ID。 请帮帮我。

对不起我的英语。如果不明白,请在 cmets 中告诉我,我会向您解释更多内容并分享更多内容。我只是该领域的初学者,所以只是学习。

观看次数

@csrf_protect
def rentacar_car(request, car_id,driver_id):

    try:
        args['car'] = Car.objects.get(id__exact=car_id)
        args['driver_id'] = driver_id
    except:
        args['car'] = None
        args['driver_id'] = None


    if args['car'] is not None:
        template = Template.objects.get(template_default__exact=1)

        return render(request, template_page, args)
    else:
        return HttpResponseRedirect('/rentacar/list/')

def rentacar_booking(request):
template = Template.objects.get(template_default__exact=1)
template_page = template.template_alias + str("/rentacar/rentacar_booking_form.html")
menu_config_list = MenuItemRentacarList.objects.all()[0]
menu_config = MenuItemRentacarList.objects.get(id=menu_config_list.id)
args['main_menu'] = MenuMenu.objects.get(id__exact=template.template_main_menu_id)
args['menu_items'] = MenuItem.objects.filter(
    menu_item_menu=args['main_menu'],
    menu_item_published=1,
)
args['current_menu_item'] = menu_config.menu_item_rentacar_list_menu_item
all_modules = Module.objects.filter(
    module_show_option__exact='all',
    module_published=1
)
selected_modules = Module.objects.filter(
    module_show_option__exact='selected',
    module_published=1,
    module_menu_item=args['current_menu_item']
)
excluded_modules = Module.objects.filter(
    module_show_option__exact='except',
    module_published=1,
).exclude(
    module_menu_item=args['current_menu_item']
)
args['modules'] = list(chain(all_modules, selected_modules, excluded_modules))

        try:
            args['car'] = Car.objects.get(id__exact=request.POST.get('car_id'))
            args['driver'] = Driver.objects.get(id__exact=request.POST.get('driver_id'))
        except:
            args['car'] = None
            args['driver'] = None

        if args['car'] is not None:
            return render(request, template_page, args)
        else:
            return HttpResponseRedirect('/rentacar/list/')
    else:
        return HttpResponseRedirect('/')

模板

rentacar_book_form

                    <div class="row">
                        <div class="medium-6 small-12 columns">
                            <label>
                                Book Start Date <br>
                                <input type="date" name="book_booking_start_date" required>
                            </label>
                        </div>
                        <div class="medium-6 small-12 columns">
                            <label>
                                Book End Date <br>
                                <input type="date" name="book_booking_end_date" required>
                            </label>
                        </div>
                    </div>

                            <hr>
                            <input type="submit" class='button large primary' value="Book {{ car.car_brand.brand_name }} {{ car.car_name }}">
                        </div>
                    </div>

                    <input type="text" name="book_booking_car_car" value="{{ car.id }}" class="hidden">
                    <input type="text" name="book_booking_driver_driver" value="{{ driver.id }}" class="hidden">

rentacar_car_car

        <form action="/rentacar/book-a-car/" method="post">
            {% csrf_token %}
            <input name="car_id" type="text" value="{{ car.id }}" class="hidden" required>
            <input name="driver_id" type = 'text' value="{{ driver.id }}" class = 'hidden' required>
            <button type="submit" class="button primary uppercase centered full-width">
                Book now!
            </button>
        </form>

urls.py

url(r'^rentacar/book-a-car/$', extension_views.rentacar_booking),
url(r'^rentacar/list/(\d+)/$', extension_views.rentacar_list),
url(r'^rentacar/car/(\d+)/driver/(\d+)/$', extension_views.rentacar_car),

【问题讨论】:

  • args 未在rentacar_bookingrentacar_car 中定义
  • @gogaz 我不明白
  • 当您执行args['car'] = Car.objects... 时,args 变量尚未定义。这可能是由于您在发布到 SO 时应用的格式
  • @gogaz 看看我的代码,现在我更新了它。我删除了它,因为它太长了。
  • 好的,那么您没有正确地向我们展示您的代码,因为您在此处发布的内容无法运行,它会导致 python NameError: name 'args' is not defined. 请始终确保您发布人们可以发布的相关代码用于重现您的问题。忽略不相关的内容,但您发布的内容必须在编程意义上是完整的。

标签: django django-forms django-templates django-views


【解决方案1】:

如果您只想从隐藏输入中获取值,请执行此操作。 在方法rentacar_car 中输入:

car_id = request.GET.get('car_id')
driver_id = request.GET.get('driver_id')
print(car_id)
print(driver_id)

而且由于您要从这些输入中获取值,因此您必须将表单方法更改为 GET。

【讨论】:

  • 点击立即预订按钮后,它不会将我重定向到 book-a-car 页面
  • 所以您打印了 driver_id 和 car_id 并且这些数字是错误的?这是你之前的问题,但如果它们是正确的,那么你在其他地方就会出现错误。
猜你喜欢
  • 1970-01-01
  • 2019-06-25
  • 2020-03-21
  • 2021-02-01
  • 2014-08-06
  • 2020-06-05
  • 2014-03-22
  • 2021-01-05
  • 2015-07-10
相关资源
最近更新 更多