Данные контекста не передаются при вызове из другой функции просмотра - PullRequest
2 голосов
/ 08 июля 2019

У меня есть эта функция,

def event (request):
    all_events = Quiz.objects.filter(owner_id=request.user.pk, status="Assigned")
    get_event_types = Quiz.objects.filter(owner_id=request.user.pk, status="Assigned")
    context = {"events": all_events, "get_event_types": get_event_types, }
    print("context is", context)
    return render(request, 'classroom/teachers/calendar.html', context)

и он работает нормально, если я передам шаблон как calendar.html. Предполагается нарисовать календарь, а также передать контекст, называемый событиями, который затем обрабатывается функцией JavaScript для заполнения дней некоторыми значениями данных.

Это мой правильный рабочий calendar.html:

{% extends 'base.html' %}
{% load fullcalendar_tags %}

{% block content %}

{% for i in events %}
    {{ i }}
{% endfor %}


    {% calendar %}
    <script>

        $(document).ready(function () {

            var currentView = '',
                d = new Date(),
                today = d.getDay(),
                dow = 1;
            $('#calendar').fullCalendar({
                header: {
                    left: 'prev,next',
                    center: 'title',
                    right: 'month,agendaWeek'
                },
                defaultDate: d,
                events: [
                    {% for i in events %}
                        {
                            title: "{{ i.weight}} Kg",
                            start: '{{ i.scheduled_date|date:"Y-m-d" }}',
                            end: '{{ i.scheduled_date|date:"Y-m-d" }}',

                        },
                    {% endfor %}],
                navLinks: true,
                firstDay: 1, //Monday
                viewRender: function (view) {
                    if (view && view.name !== currentView) {
                        if (view.name === 'agendaWeek') {
                            dow = today;
                        } else {
                            dow = 1;
                        }
                        setTimeout(function () {
                            $("#calendar").fullCalendar('option', 'firstDay', dow);
                        }, 10);
                    }
                    if (view) {
                        currentView = view.name;
                    }
                }
            });

        });

    </script>
{% endblock %}

Это просто отлично отображает контекстное событие. Но когда я пытаюсь передать это в другое представление, часть {% calendar%} работает просто отлично, но контекст вообще не отправляется. Я напечатал его несколько раз, и по какой-то причине он ничего не передает в контексте «событий».

Я нашел способ вызова функции события из другого представления (не очень уверенный, если лучший метод доступен, но он казался простым для выполнения).

def json_example1 (request):
    distinct_origin = Quiz.objects.filter(owner_id=request.user.pk).order_by().values_list('origin',
                                                                                           flat=True).distinct()
    distinct_o_list = list(distinct_origin)
    distinct_dest = Quiz.objects.filter(owner_id=request.user.pk).order_by().values_list('destination',
                                                                                         flat=True).distinct()
    distinct_d_list = list(distinct_dest)
    markers_list = list(set(distinct_o_list) | set(distinct_d_list))

    # print("markers", markers_list)

    gmaps = googlemaps.Client(key='AIzaSyArNLCXScd7tH0mwlDDPqXoVNgTT6emblI')
    latitude = list()
    longitude = list()
    for i in markers_list:
        geocode_result = gmaps.geocode(i)

        lat = geocode_result[0]["geometry"]["location"]["lat"]
        lon = geocode_result[0]["geometry"]["location"]["lng"]
        longitude.append(lat)
        latitude.append(lon)

    # print("lat", latitude)
    data = pd.DataFrame({'lat': latitude, 'lon': longitude, 'name': markers_list})
    m = folium.Map(location=[21, 78], tiles="OpenStreetMap", zoom_start=4.75)
    for i in range(0, len(data)):
        folium.Marker([data.iloc[i]['lon'], data.iloc[i]['lat']], popup=data.iloc[i]['name']).add_to(m)

    html_string = m._repr_html_()
    context = {'map2': html_string}

    # print("context is", context)

    def load_calendar (request):
        return event(request)

    load_calendar(request)  //Here I am loading the function

    return render(request, 'classroom/teachers/graph_tot_trucks.html', context)

Любые подсказки ??

1 Ответ

0 голосов
/ 09 июля 2019

Я смог сделать это отлично с помощью iframe.Все данные контекста также передаются очень хорошо.Странно, но я так и не нашел никакой подсказки об этом в SO или Google.

...