python - 如果从不同的 View 函数调用,则不会传递上下文数据

标签 python django django-models calendar django-views

我有这个功能,

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 %}

这会很好地呈现上下文事件。但是,当我尝试将其传递给另一个 View 时,{% 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)

有什么线索吗??

最佳答案

我能够使用 iframe 完美地做到这一点。所有上下文数据也都可以正常传递。奇怪,我从来没有在 SO 或 Google 上找到任何关于此的线索。

关于python - 如果从不同的 View 函数调用,则不会传递上下文数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56932957/

相关文章:

python - scipy.optimize 的 'root' 和 'fixed_point' 方法有什么区别

django - 从 Django 应用程序添加 URLS

python - ModelAdmin 中的 Django csrf_token

python - Django:如何使用我的模型类从 Django 外部与我的数据库交互?

django - 如何修改默认的Django用户表

python - 使用OpenCV按颜色分割图像

python - 使用选择界面创建 Python CLI

django - 使用模型的 __unicode__ 作为管理表单中的搜索字段

python - 如何删除/r 并解决我在 BeautifulSoup 中遇到的奇怪格式问题?

django - 向用户添加权限时 - ValueError : too many values to unpack