【问题标题】:django 1.5: not being able to get the values of variable in viewdjango 1.5:无法在视图中获取变量的值
【发布时间】:2013-12-30 13:43:42
【问题描述】:

我是 django 的新手。我有 django 1.5。我想将两个变量从一个模板带到另一个模板。但我没有收到价值,而是什么也没收到。

我想从中发送变量作为 url 一部分的模板的代码是:

<div class="tags">
                  {% for tags1 in document.tags.all %}
                    {% if tags1.name|length > 0 %}
                    {% with tags1.name as tagts %}{% endwith %}
                    <a href="{% url 'tag_related_document' user tagts %}">{{ tags1.name }}</a>
                    {% endif %}
                  {% endfor %}
                  </div>

我调用 Second View 的 URL 代码是:

url(r'^tag_related/(?P<username>[-\w\.@]+)/(?P<tagts>)/$',
       tag_related_document,
       {'template_name': 'document/tag_related_document.html'},
       name = 'tag_related_document'
    ),

View tag_related_document 的代码是:

def tag_related_document(request, username, tagts, template_name , page_template="userprofile/entry_index_page.html"):
    """
   documents  Related to tag    """
    try:
        notifications = request.user.notifications.all()[:100]
    except AttributeError:
        notifications = ""

    user = get_object_or_404(User, username = username)

    try:
        user_profile = user.get_profile()
    except UserProfile.DoesNotExist:
        messages.error(request, "Profile does not exist.")
        return HttpResponseRedirect(reverse('homepage'))

    documents = Document.objects.filter( Q(tags__in = user_profile.tags.all()) , date_deleted = None).order_by("-date_added")
    if not documents:
        documents = Document.objects.filter( date_deleted = None).order_by("?")
    related_doc_widget = Document.objects.filter( Q(tags__in = user_profile.tags.all()) , date_deleted = None).order_by('?')
    if not related_doc_widget:
        related_doc_widget = Document.objects.filter( date_deleted = None).order_by("?")

    followers_widget = Felloz.objects.get_followers(user = user_profile.user)
    followings_widget = Felloz.objects.get_followings(user = user_profile.user)
#    recommendations_widget = UserProfile.objects.filter(Q(~Q(user__in = followings_widget) or ~Q(user = request.user) ) ).order_by('?')

    recommendations_widget = UserProfile.objects.filter( tags__in = user_profile.tags.all() ).distinct().exclude(user__in = followings_widget).exclude( user = user )
    if not recommendations_widget:
        recommendations_widget = UserProfile.objects.filter(~Q( user__in = followings_widget ) ).exclude( user = user ).order_by('?')

    ideas_widget = Idea.objects.filter(user = user).order_by('?')
    for idea in ideas_widget:
            is_substring = "<a" in idea.idea_html
            if(is_substring is False):
                idea.idea_html = truncate_chars(idea.idea_html,50)
            else:
                idea.idea_html = htmltruncate.truncate(idea.idea_html,50,ellipsis='')   

    no_of_documents = len( Document.objects.filter(author = user) )
    no_of_ideas = len(Idea.objects.filter(user=user))
    try:
        slug_status = SlugStatus.objects.get(user=user)
    except SlugStatus.DoesNotExist:
        slug_status = ''

    context = {
        'slug_status':slug_status,
        'documents': documents, 
        'page_template': page_template,
        'followers_widget': followers_widget,
        'followings_widget': followings_widget,
        'related_doc_widget': related_doc_widget,
        'user': user,
        'site': Site.objects.get_current(),
        'profile':user_profile,
        'recommendations_widget': recommendations_widget,
        'no_of_documents':no_of_documents,
        'no_of_ideas': no_of_ideas,
        'notifications': notifications,
        'notifications_unread': request.user.notifications.unread(),
        'idea_widget': ideas_widget,
        'tagts':tagts,
    }
    print '=============i m here==================='
    print tagts
    print '=============i m here==================='
#related_doc_widget = Document.objects.filter(~Q(author = user) and ~Q(tags__in = UserProfile.tags.all())).order_by('?')
#recommendations_widget = UserProfile.objects.filter(~Q(user__in = followings_widget) and ~Q(user = user)).order_by('?')

#documents_newsfeed = Document.objects.filter(Q(author = user) | Q(author__in = followings_widget), date_deleted = None).order_by("-date_added")

    if request.is_ajax():
        template_name = page_template
    return render_to_response(template_name, context, context_instance=RequestContext(request))

    return render_to_response(template_name, context, context_instance=RequestContext(request))

我要显示该变量的第二个模板的代码是:

{% if profile.user == request.user %}
            <h2 class="mainHeading"> Documents Related To: {{tagts}} </h2>
        {% else %}
            <h2 class="mainHeading"> Documents Related To: {{tagts}}</h2>
            {% endif %} 

但是我什么都没到……请帮忙提前谢谢……

【问题讨论】:

  • 在视图中打印tagts会发生什么?
  • 什么都没有显示,可能是一个空值......

标签: python django django-urls


【解决方案1】:

您在{% url %} 之前关闭了{% with %},所以 url 是基于空值的,我认为这是原因。

请避免发布大量不相关的代码。将其缩小到重现错误所需的最小量。

【讨论】:

  • 感谢您的回复...我这样做只是因为有人在理解问题时没有感到困惑。我将来会避免发布大量代码。 :-) 亲爱的,我已经做到了,但我在此更改中遇到了另一个错误。 “NoReverseMatch at /document/f50bc24217/documents-list/ 为带有参数 '(, u'tage')' 和关键字参数 '{}' 的 'tag_related_document' 反向。”
  • 因为你应该使用user.username 之类的东西来构建URL
  • 大家感谢您的帮助,我自己解决了我的问题。这只是url中正则表达式的问题。当数据中有空格时,它不允许空格通过。
【解决方案2】:

应该是这样,除非代码与您发布的代码不同。

{% for tags1 in document.tags.all %}
      {% if tags1.name|length > 0 %}
        {% with tags1.name as tagts %}
         <a href="{% url 'tag_related_document' user tagts %}">{{ tags1.name }}</a>
        {% endwith %}
      {% endif %}
 {% endfor %}

【讨论】:

    猜你喜欢
    • 2013-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多