Python 在Django模板中访问字典值时出现问题

Python 在Django模板中访问字典值时出现问题,python,django-templates,Python,Django Templates,以下是我的查看功能: def detail(request, movie_id): movie = Movie.objects.get(id = movie_id) movieReleases = Release.objects.filter(movie = movie) reviews = Review.objects.filter(movie = movie) initRating = 0 if request.user.is_authentica

以下是我的查看功能:

def detail(request, movie_id):
    movie = Movie.objects.get(id = movie_id)
    movieReleases = Release.objects.filter(movie = movie)
    reviews = Review.objects.filter(movie = movie)

    initRating = 0

    if request.user.is_authenticated():
        user = Account.objects.get(user = request.user.id)
        try:
            myreview = Review.objects.get(movie = movie, user = user)
            initRating = myreview.rating
        except:
            pass

        releaseContext = dict()
        for release in movieReleases:
            if release.isReleased():
                releaseContext[release.id] = {'buttonURL' : reverse('movies.views.add', args=(release.id,)), 'buttonText' : 'Add to cart'}
            elif MovieReleaseReminder.objects.filter(account=user, movie=release).exists():
                releaseContext[release.id] = {'buttonURL' : reverse('movies.views.unsubscribeFromReleaseReminder', args=(release.id,)), 'buttonText' : 'Unsubscribe from release reminder'}
            else:
                releaseContext[release.id] = {'buttonURL' : reverse('movies.views.subscribeForReleaseReminder', args=(release.id,)), 'buttonText' : 'Subscribe to release reminder'}

        if MovieUpdateSubscription.objects.filter(account=user, movie=movie).exists():
            movieSubscribeURL = reverse('movies.views.unsubscribeFromUpdates', args=(movie.id,))
            movieSubscribeButtonText = 'Unsubscribe from updates'
        else:
            movieSubscribeURL = reverse('movies.views.subscribeForUpdates', args=(movie.id,))
            movieSubscribeButtonText = 'Subscribe for updates'

    else:
        releaseContext = None
        movieSubscribeURL = None
        movieSubscribeButtonText = None


    averageRating = calculateAverageRating(movie)

    t = loader.get_template('movies/detail.html')
    c = RequestContext(request, {'movie' : movie,
                                 'movieReleases' : movieReleases,
                                 'releaseContext' : releaseContext,
                                 'reviews': reviews,
                                 'averageRating': averageRating,
                                 'initRating': initRating,
                                 'movieSubscribeURL' : movieSubscribeURL,
                                 'movieSubscribeButtonText' : movieSubscribeButtonText})
    return HttpResponse(t.render(c))
下面是有问题的模板代码:

{% if movieReleases%}
    <table border="1px">
        {% for release in movieReleases %}
            <tr>
                <td>{{release.format}}</td>
                <td>{{release.region}}</td>
                <td>{{release.price}}</td>
                {% if user.is_authenticated %}
                    {% with release_id=release.id %}
                        <td><form action="{{ releaseContext.release_id.buttonURL }}" method="post">{% csrf_token %}<input type="submit" value="{{ releaseContext.release_id.buttonText }}" /></form></td>
                    {% endwith %}
                {% endif %}
            </tr>
        {% endfor %}
    </table>
{% endif %}
{%if movieReleases%}
{%在movieReleases%中发布}
{{release.format}
{{release.region}
{{release.price}}
{%if user.u经过身份验证%}
{release_id=release.id%}
{%csrf_令牌%}
{%endwith%}
{%endif%}
{%endfor%}
{%endif%}

问题是,在呈现模板时,
{{releaseContext.release\u id.buttonext}
{{releaseContext.release\u id.buttonext}
都在计算空字符串,即使我在调试器中检查了releaseContext是否具有适当的数据。我缺少什么?

因为
releaseContext
是一个字典,所以属性查找(x.y)不是您需要的,而是元素查找(x[y])

因此,不是:

{{releaseContext.release\u id.buttonURL}}

使用


{{releaseContext['release_id']['buttonURL']}
在将其交给模板之前,尝试从字典中获取值:

{% display = releaseContext['release_id']['buttonURL'] %}
{{ display }}

哦,我不知道你可以在模板中使用方括号。我记得在某个地方读到,使用“.”会让django以某种顺序尝试所有的成员、方法和字典查找,所以我认为它是唯一的运算符。annnnnnnnd它不起作用。TemplateSyntaxError at/movies/detail/4/无法解析剩余的:“[release.id]['buttonURL']”来自“releaseContext[release.id]['buttonURL']"从你粘贴的内容来看,引用似乎仍然是错误的。它应该是“releaseContext['release_id']['buttonURL']”