【问题标题】:How to render the POST results in a Django API view?如何在 Django API 视图中呈现 POST 结果?
【发布时间】:2017-08-23 22:48:37
【问题描述】:

我有一个带有 get 和 post 方法的 APIView,其中包含两个名为 tickets_per_day_no_results.htmltickets_per_day_results.html 的模板。当我访问 results.html 文件时,我有两个下拉菜单和一个搜索按钮,用于从内部 Web API 获取数据,如下所示:。

当我点击搜索按钮时,我的问题出现了,我最终将结果显示为 APIView(我不希望这些结果,我希望将它们转移到我的 tickets_per_day_results.html 文件)。

这是我现在的代码:

urls.py

from .views import ChartData7
urlpatterns = [
    url(r'^$', views.index, name='index'),  # home
    url(r'^statistics/$', views.statistics, name="statistics"),
    url(r'^tickets_per_day_no_results/$', ChartData7.as_view()), 
]

Views.py

class ChartData7(APIView):

def get(self,request): 
    template_name = 'personal_website/tickets_per_day_no_results.html'
    form = DropDownMenuForm()
    return render(request, template_name, {'form': form})

def post(self,request):
    template_name = 'personal_website/tickets_per_day_results.html'
    if request.method == "POST":
        year = request.POST.get('select_year',None)
        week = request.POST.get('select_week', None)
        ....do stuff...
        data = {"label_number_days":label_number_days,
                "days_of_data": count_of_days,}
        return Reponse(data)
    return render(request, template_name)

tickets_per_day_no_results

{% block content %}
<h3>Please, select the year and week number to retrieve the data.</h3>
<form id="search_dates" method="POST"> {% csrf_token %}
<h6>Select year</h6>

<div class="row">
    <div class="col-sm-8">
        <select name="select_year">
            <option value = {{form.year}}></option>
        </select>
    </div>
    <div class="col-sm-8">
        <h6>Select week</h6>
        <select name="select_week">
            <option value= {{form.week}}></option>
        </select>
        <button type="submit">Search</button>
    </div>
</div>
</div>

tickets_per_day_results.html

<script>
{% block jquery %}

var endpoint = '/statistics/tickets_per_day_results' //This  

var days_of_data = []
var label_number_days = []

$.ajax({
    method: "POST",
    url: endpoint,
    dataType: 'json',
    success: function(data){
        console.log(data)
        label_number_days = data.label_number_days
        days_of_data = data.days_of_data
        setChart()

    },
    error: function(error_data){
        console.log("error on data")
        console.log(error_data)
    }
})

{% block content %}

<div class ='row'>
<div class="col-sm-12" url-endpoint='{% url "tickets_per_day_results" %}'>
        <div>
            <canvas id="tickets_per_day" width="800" height="500"></canvas>
        </div>
</div>
</div>

{% endblock content %}

我的猜测是我的 urls.py 文件中的 url 有问题,或者我没有以正确的方式发送 ticket_per_day_results.html,因为在我的浏览器的 url 导航中,我没有看到 ticket_per_day_results 网页。我错过了什么?

【问题讨论】:

    标签: javascript html django python-3.x django-forms


    【解决方案1】:

    通常在使用 Django REST Framework 时,API 从 HTML 调用,javascript 遍历从 DRF 返回的对象并显示在 HTML 中。据我了解,不要使用 Django REST 框架,而是使用 Django 框架并将结果直接呈现到 HTML 模板。

    一个简单的例子如下所示。

    def homepage(request, template='homepage.html'):
    
        proposal_list = Proposal.objects.all().order_by('-created')
    
        return render_to_response(template, 
            {"proposal_list": proposal_list, },
            context_instance=RequestContext(request))
    

    您可以使用 Django 的Class Based Views 功能并呈现您的结果,而不是编写原始视图。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-22
      • 2018-03-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多