微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Django NoReverseMatch-Amadeus API

如何解决Django NoReverseMatch-Amadeus API

我正在尝试将API用作我正在从事的项目的一部分,目前遇到一些困难:

API https://developers.amadeus.com/self-service/category/air/api-doc/airport-and-city-search

API-Python SDK https://github.com/amadeus4dev/amadeus-python

Django API指南 https://developers.amadeus.com/blog/django-jquery-ajax-airport-search-autocomplete

我已遵循上述指南中的说明;但是,尝试呈现包含代码的索引页时,出现以下错误

Reverse for 'origin_airport_search' not found. 'origin_airport_search' is not a valid view function or pattern name.

索引模板:

{% extends "flightfinder/layout.html" %}

{% block body %}
<div id="mainhomepagediv">
    <div class="container-fluid px-0" id="mainhomepagediv">
        <div class="row mx-0">
            <div class="col-12 px-0">
                <img src="https://i.ibb.co/rHYzcyc/Landscape2.jpg" class="img-fluid w-100">
            </div>
        </div>
    </div>
    <div>
        <h1 id="homepageh1">Where are you flying to?</h1>
        <div id="homepageBox">
            <div>
                <form id="homepageform" method="POST">
                    <div class="row">
                      <div class="col">
                        <label id="homepageformlabel">From</label>
                        <input type="text" class="form-control" placeholder="Origin city" id="inputOrigin">
                      </div>
                      <div class="col pb-3">
                        <label id="homepageformlabel">To</label>
                        <input type="text" class="form-control" placeholder="Destination city">
                      </div>
                    </div>
                    <div class="row">
                        <div class="col">
                          <label id="homepageformlabel">Depart</label>
                          <input type="date" class="form-control" placeholder="Origin city">
                        </div>
                        <div class="col">
                            <label id="homepageformlabel">Return</label>
                            <input type="date" class="form-control" placeholder="Destination city">
                          </div>
                        <div class="col-6">
                          <label id="homepageformlabel">Class</label>
                          <select id="inputState" class="form-control">
                            <option selected>Economy</option>
                            <option>Business</option>
                            <option>First</option>
                          </select>
                        </div>
                      </div>
                      <div class="row">
                        <div class="col">
                        </div>
                        <div class="col-3 pt-3">
                            <button class="btn float-right" id="homepageformbutton" type="submit">Search flights</button>
                        </div>
                      </div>
                  </form>
            </div>
        </div>
    </div>
</div>    
<script>
  // Amadeus origin airport search
  $(document).ready(function () {
      $("#inputOrigin").autocomplete({
          source: "{% url 'origin_airport_search' %}",minLength: 1,delay: 200,});
  });
</script>
{% endblock %}

布局模板:

{% load static %}

<!doctype html>
<html lang="en">
  <head>
    <!-- jQuery & jQuery UI -->
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
    <link rel="stylesheet" href="https://ajax.googleapis.com/ajax/libs/jqueryui/1.12.1/themes/smoothness/jquery-ui.css">
    <script src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.12.1/jquery-ui.min.js"></script>

    <!-- Bootstrap (includes Popper) -->
    <script src="https://cdn.jsdelivr.net/npm/bootstrap@4.5.3/dist/js/bootstrap.bundle.min.js" integrity="sha384-ho+j7jyWK8fNQe+A12Hb8AhRq26LrZ/JpcUGGOn+Y7RsweNrtN/tE3MoK7ZeZDyx" crossorigin="anonymous"></script>

    <!-- required Meta tags -->
    <Meta charset="utf-8">
    <Meta name="viewport" content="width=device-width,initial-scale=1,shrink-to-fit=no">

    <!-- Main css-->
    <link rel="stylesheet" type="text/css" href="{% static 'flightfinder/styles.css' %}">

    <!-- Main JS -->
    <script src="{% static 'flightfinder/main.js' %}"></script>

    <!-- Bootstrap CSS -->
    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.5.3/dist/css/bootstrap.min.css" integrity="sha384-TX8t27EcRE3e/ihU7zmQxVncDAy5uIKz4rEkgIXeMed4M0jlfIDPvg6uqKI2xXr2" crossorigin="anonymous">

    <!-- Font Awesome Icons -->
    <link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.0/css/all.css" integrity="sha384-lZN37f5QGtY3VHgisS14W3ExzMWZxybE1SJSEsQp9S+oqd12jhcu+A56Ebc1zFSJ" crossorigin="anonymous">

    <title>{% block title %}Flight Finder{% endblock %}</title>
  </head>
  <body>
      <nav class="navbar navbar-expand-lg navbar-light">
        <a class="navbar-brand" href="{% url 'flightfinder:index' %}">
            <img src="https://i.ibb.co/TRBkPBZ/Flight-Finder-removebg-preview.png" width="166" height="42" class="d-inline-block align-top" alt="">
        </a>
        <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarNavAltMarkup" aria-controls="navbarNavAltMarkup" aria-expanded="false" aria-label="Toggle navigation">
          <span class="navbar-toggler-icon"></span>
        </button>
        <div class="collapse navbar-collapse" id="navbarNavAltMarkup">
          <div class="navbar-nav">
            <a class="nav-item nav-link active" href="{% url 'flightfinder:index' %}">Flights <span class="sr-only">(current)</span></a>
            <a class="nav-item nav-link" href="#">Hotels</a>
            <a class="nav-item nav-link" href="#">Car Hire</a>
          </div>
        </div>
      </nav>
    {% block body %}
    {% endblock %}
  </body>
</html>

主要-urls.py:

"""finalproject URL Configuration

The `urlpatterns` list routes URLs to views. For more information please see:
    https://docs.djangoproject.com/en/3.1/topics/http/urls/
Examples:
Function views
    1. Add an import:  from my_app import views
    2. Add a URL to urlpatterns:  path('',views.home,name='home')
Class-based views
    1. Add an import:  from other_app.views import Home
    2. Add a URL to urlpatterns:  path('',Home.as_view(),name='home')
Including another URLconf
    1. Import the include() function: from django.urls import include,path
    2. Add a URL to urlpatterns:  path('blog/',include('blog.urls'))
"""
from django.contrib import admin
from django.urls import include,path

urlpatterns = [
    path('',include('flightfinder.urls',namespace='Flightfinder')),path('admin/',admin.site.urls),]

应用-urls.py:

from django.urls import path

from . import views

app_name = 'flightfinder'

urlpatterns = [
    path('',views.index,name='index'),path('origin_airport_search/',views.origin_airport_search,name='origin_airport_search')
]

views.py:

import json
from django.shortcuts import render
from django.http import HttpResponse
from django.contrib import messages
from amadeus import Client,ResponseError,Location

from .models import Airport,Flight,Passenger

amadeus = Client(client_id='removed',client_secret='removed',log_level='debug') 

# Create your views here.
def index(request):
    return render(request,'flightfinder/index.html')

def origin_airport_search(request):
    if request.is_ajax():
        try:
            data = amadeus.reference_data.locations.get(keyword=request.GET.get('term',None),subType=Location.ANY).data
        except ResponseError as error:
            messages.add_message(request,messages.ERROR,error)
    return HttpResponse(get_city_airport_list(data),'application/json')

def get_city_airport_list(data):
    result = []
    for i,val in enumerate(data):
        result.append(data[i]['iataCode']+','+data[i]['name'])
    result = list(dict.fromkeys(result))
    return json.dumps(result)

我已经看过一些类似的堆栈查询,但是到目前为止,它们都没有帮助。如果有人有任何想法可以在这里尝试,将不胜感激?

谢谢!

解决方法

您已在包含文件中设置了名称空间“ Flightfinders”。这意味着您必须使用此命名空间来调用您的URL:

      source: "{% url 'Flightfinder:origin_airport_search' %}",

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。