如何从HTML按钮调用函数-Django

时间:2018-08-25 14:58:58

标签: html django

我想做的是当用户单击“添加到购物车”按钮时执行一个功能,屏幕上显示的产品将被添加到购物车模型中。到目前为止,我已经弄清楚了如何从外壳向购物车添加对象。我不知道如何用html调用python函数以及如何将对象传递给它。先感谢您。

我的template.html:

"select * from Users ORDER BY name"

我的观点:

{% extends 'templates/header.html' %}

<title>{% block head_title %}{{ object.name }} - {{ block.super }}{% endblock head_title %}</title>

{% block head %}
	{{ block.super }}
	{% load staticfiles %}
	<link rel = "stylesheet" href = "{% static 'css/products_detail.style.css' %}" type = "text/css"/>
{% endblock head %}

{% block content %}
	<div id='Product-Page'>
		<p>{{ object.name }}</p>
		<hr>
		<div id='Product-Image'>
			<img src='{{ object.image.url }}' alt='{{ object.image.name }}'/>
		</div>
		<div id='Product-Details'>
			<p id='Product-Name'>{{ object.name }}</p>
			<p id='Product-Description'><small>{{ object.description }}</small></p>
		</div>
		<div id='Product-Buy'>
			<p id='Product-Price'>{{ object.price }} лв.</p>
			<p id='Product-Quantity'>{{ object.quantity }} </p>

			<form class='Product-Form' method='post' action='#'>
				{% csrf_token %}
				<input class='Product-Button' type='submit' value='Buy Now'>
			</form>

			<form class='Product-Form' method='get' action=''>
				{% csrf_token %}
				<input class='Product-Button' type='submit' value='Add to cart'>
			</form>
		</div>
		<hr>
	</div>
{% endblock content%}

1 个答案:

答案 0 :(得分:1)

您可以向每种表单添加隐藏的输入(这两种输入均应为POST方法,而不是GET),然后将post方法添加至视图。像这样:

        <form class='Product-Form' method='post'>
            {% csrf_token %}
            <input name="buy-now" hidden>
            <input name="pk" value="{{ object.pk }}" hidden>
            <button type="submit" class="btn">Buy Now</button>
        </form>

        <form class='Product-Form' method='post'>
            {% csrf_token %}
            <input name="add-to-cart" hidden>
            <input name="pk" value="{{ object.pk }}" hidden>
            <button type="submit" class="btn">Add to cart</button>
        </form>

然后在您看来:

class ProductDetailView(DetailView):
    template_name = 'products/products_detail.html'

    def get_object(self, *args, **kwargs):
        slug = self.kwargs.get('slug')
        return get_object_or_404(Product, slug=slug)

    def post(self, request, *args, **kwargs):
        name = request.POST.get("pk")
        product = Product.objects.get(pk=pk)

        if "buy-now" in request.POST:
            #Do something to buy.
            print('buy now ' + product.name)
        elif "add-to-cart" in request.POST:
            #Add to cart.
            print('add to cart ' + product.name)

        return redirect('home')

或者,如果您不想重新加载页面,也可以通过AJAX进行。