0

GET リクエスト (formExample1.html) のフォームを表示するように、views.py にメソッドを記述しました。フォームを POST で送信し、いくつかの処理を行った後、結果を表示しています。ページ (results.html)。

フォームは正しく表示され、フォームが送信されると、POST リクエストが正しく生成され、Django サーバーによって受信されるため、実行するはずのすべてのことを実行しますが、最終的に結果ページをレンダリングしていません: ブラウザーフォームページにとどまります。

 def formExample1(request):
    print 'RECEIVED REQUEST: ' + request.method
    if request.method == 'POST':
        value1 = request.REQUEST['value1']
        value2 = int(request.REQUEST['value2'])
        # etc
        #
        geojson = createGeoJSON(value1, value2)
        print geojson #json is correctly generated at printed at server console
        return render(request, 'results.html', {'geo_json': geojson}) # This is what is not working
    else: #GET
        return render(request, 'formExample1.html') # Working OK

また、geoJSON オブジェクトを render 関数に渡さないと、どちらも機能しません。

ここには詳細が欠けていると思います。何か助けはありますか?

編集:結果ページを表示しても役に立たないと思いますが、ここにあります。これは現在、OpenLayers マップを含み、geojson からマップにデータをフィードすることを意図している単純な html です (私が渡している geojson を取得する方法がわからないため、その方法はまだわかりません)。しかし、それは別の話です)。そう:

<!DOCTYPE html>
<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0">
    <meta name="apple-mobile-web-app-capable" content="yes">
    <link rel="stylesheet" href="{{STATIC_URL}}css/style.css" type="text/css">
    <script src="{{STATIC_URL}}js/OpenLayers.js"></script>
    <script type="text/javascript">
        var lon = 5;
        var lat = 40;
        var zoom = 5;
        var map, layer;

        function init(){
            map = new OpenLayers.Map( 'map' );
            layer = new OpenLayers.Layer.WMS( "OpenLayers WMS", 
                    "http://vmap0.tiles.osgeo.org/wms/vmap0",
                    {layers: 'basic'} );
            map.addLayer(layer);
            map.setCenter(new OpenLayers.LonLat(lon, lat), zoom);

            // Here is where I'm trying to get the geojson I'm passing, but I think this is wrong. Anyway has nothing to do with current problem
            var featurecollection = {{ geo_json|safe }};
            var geojson_format = new OpenLayers.Format.GeoJSON();
            var vector_layer = new OpenLayers.Layer.Vector(); 
            map.addLayer(vector_layer);
            vector_layer.addFeatures(geojson_format.read(featurecollection));

        }
    </script>
  </head>
  <body onload="init()">
    <h1 id="title">GeoJSON Example</h1>

    <div id="tags">
       JSON, GeoJSON
    </div>

      <p id="shortdesc">
        Demonstrate the use of the GeoJSON format.
    </p>
    <div id="map" class="smallmap"></div>
    <div id="docs">
        <p>This example uses the GeoJSON format.</p>
    </div>
  </body>
</html>

これはOpenLayersの例として投稿された HTML と 99% 同一です。だから大丈夫だと思います。問題は別の場所にあるはずです。

EDIT2: formExample1.html コードも追加:

<html>
<head>  
    <script src="{{STATIC_URL}}js/jquery-1.9.1.js"></script>
    <script src="{{STATIC_URL}}js/jquery-ui-1.10.3.custom.js"></script>
    <link rel="stylesheet" href="{{STATIC_URL}}css/jquery-ui-1.10.3.custom.css">

    <style type="text/css">
        .ui-slider .ui-slider-handle { z-index: 1; }
    </style>

    <script>
$(function() {
    function getCookie(name) {
        var cookieValue = null;
        if (document.cookie && document.cookie != '') {
            var cookies = document.cookie.split(';');
            for (var i = 0; i < cookies.length; i++) {
                var cookie = jQuery.trim(cookies[i]);
                // Does this cookie string begin with the name we want?
                if (cookie.substring(0, name.length + 1) == (name + '=')) {
                    cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
                    break;
                }
            }
        }
        return cookieValue;
    }

    var csrftoken = getCookie('csrftoken');
    // DatePicker function:
    $(function() {
        var today = new Date()
        $( "#id_startDate" ).datepicker({
            minDate: 0
        });
    });

    // Interval slider function:

    $(function() {
        var currentHour = new Date().getUTCHours()
        $( "#id_interval" ).slider({
          range: true,
          min: 0,
          max: 72,
          values: [ currentHour, currentHour+48 ], // By default from current hour 1st day to same hour last day
          slide: function( event, ui ) {
            var startDay = Math.floor(ui.values[0] / 24) + 1
            var startHour = ui.values[0] % 24
            var endDay = Math.floor(ui.values[1] / 24) + 1
            var endHour = ui.values[1] % 24

            $( "#amount" ).val( "From " + startHour + ":00h day " + startDay +
             " to " + endHour + ":00h day " + endDay + " (UTC)");
          }
        });

        $( "#amount" ).val( "From " + currentHour + ":00h day 1 to " + currentHour + ":00h day 3 (UTC)");
    });

    // Threshold spinner selector:
    $(function() {
    var id_threshold = $( "#id_threshold" ).spinner();
        id_threshold.spinner( "value", 15 );
        id_threshold.spinner( "option", "min", 0 );
        $( "button" ).button();
    });

    // Movie player slider:
    $(function() {
        $( "#player-slider" ).slider({
          range: "min",
          value: 0,
          min: 0,
          max: 1000,
          slide: function( event, ui ) {
            //$( "#amount" ).val( "$" + ui.value );
          }
        });
        // Modify this line to show somehow the current displayed prediction hour
        //$( "#amount" ).val( "$" + $( "#player-slider" ).slider( "value" ) );
    });

    // Play button
    $( "#id_playButton" ).click(function() {
        var postdata = {
            'startdate': $("#id_startDate").datepicker("getDate"),
            'starthour': $("#id_interval").slider("values", 0),
            'endhour': $("#id_interval").slider("values", 1),
            'threshold': $("#id_threshold").val(),
            'csrfmiddlewaretoken': csrftoken
        };
        $.post('', postdata);

    });
});
    </script>
</head>

<body>
        <p>Start Date: <input type="text" id="id_startDate"></p>
        <p>
            <label for="amount">Interval:</label>
            <input type="text" id="amount" style="border: 0; color: #f6931f; font-weight: bold;" />
        </p>
        <p> <div id="id_interval"></div> </p>

        <p>
          <label for="id_threshold">Threshold:</label>
          <input id="id_threshold" name="value" />
        </p>

        <p> <div id="player-slider"></div> </p>

        <p>
        <p>
          <button id="id_playButton">Play</button>
        </p>
        </p>
</body>
4

1 に答える 1