【问题标题】:Counter for like button django类似按钮 django 的计数器
【发布时间】:2017-03-23 15:31:07
【问题描述】:

我有一个应用程序,我从头开始创建了一个赞按钮。我的模型在我的视图文件中拉了很多对很多。我需要让柜台在我的 html 中发布类似已发布的次数。但我得到一个错误所以我知道代码行

counter=Mysecret.objects.annotate(var=Count('creator')).order_by('created_at') is my issue. Need somone to ell me a better way to code it so it displays on my home page. 

    Traceback:

    File "C:\Users\dbhol\Desktop\DojoAssignments\Python\myenvirnoments\djangoENv\lib\site-packages\django\core\handlers\exception.py" in inner
      42.             response = get_response(request)

    File "C:\Users\dbhol\Desktop\DojoAssignments\Python\myenvirnoments\djangoENv\lib\site-packages\django\core\handlers\base.py" in _get_response
      187.                 response = self.process_exception_by_middleware(e, request)

    File "C:\Users\dbhol\Desktop\DojoAssignments\Python\myenvirnoments\djangoENv\lib\site-packages\django\core\handlers\base.py" in _get_response
      185.                 response = wrapped_callback(request, *callback_args, **callback_kwargs)

    File "C:\Users\dbhol\Desktop\DojoAssignments\Python\myenvirnoments\django2\dojosecrets\dojosecrets\apps\secretdojo\views.py" in index
      9.    counter=Mysecret.objects.annotate(var=Count('creator')).order_by('created_at')

    Exception Type: NameError at /secretdojo/
    Exception Value: global name 'Count' is not defined


Html index

<!DOCTYPE html>
<html>
<head>
    <title></title>
</head>
<body>
    <h1>Hello {{ request.session.user_fname }}!</h1>




    <form class="" action= method="post" >
            {% csrf_token %}
        <input type="submit" name="Logout" value="Logout">
    </form>




        <h2>Your Secret Here</h2>
        <form action="{% url 'secretdojo:addsecret' %}" name="secret1" method="post">
                {% csrf_token %}
            <textarea name="message" rows="8" cols="80"></textarea>
            <input type="submit" name="submit" value="post">
        </form>








         <h3>Most Popular Secrets</h3>
        <form class="" action="{% url 'secretdojo:index' %}" name="" method="post">
            {% csrf_token %}
        <input type="submit" name="Logout" value="Secret">
        </form>



            <h3>Recent Secrets</h3>


                 <table class="table">
                <tr>
                    <th>Id user</th>
                    <th>Id message</th>
                    <th>Course Name</th>
                    <th>Date Added</th>
                    <th>Action</th>
                </tr>
                {% for dog in secret %}
                <tr>

                    <td>{{ dog.secret }}</td>

                   {% for dog in counter %}
                    {{dog.var}}
                     {% endfor %}
                    <td>{{ dog.created_at }}</td>
                    {% if dog.creator.id == request.session.user_id %}
                    <td><form action="{% url 'secretdojo:remove' id=dog.id %}">{% csrf_token %}<input class="btn btn-default" type="submit" value="Remove"></form></td> 

                    <td><form action="{% url 'secretdojo:like' id=dog.id %}">{% csrf_token %}<input class="btn btn-default" type="submit" value="Like"></form></td> 
                      {% endif %}
                       {% endfor %}
                </tr>

            </table>

            Have secretes all list here Have date and time   and a like button if like button click increase count on post. Look into counter per post

            Add delete function to page

            need table for post  in table need spot for secrets. Need spot for like count  date time 





        </div>
</html>

    views.py 

    from django.shortcuts import render, redirect
    from . models import Mysecret
    from ..logReg.models import User


    # Create your views here.

    def index(request):
        counter=Mysecret.objects.annotate(var=Count('creator')).order_by('created_at')
        context = {
        "counter" : counter,
        "secret": Mysecret.objects.all(),


        }

        return render(request, 'secretdojo/index.html', context)


    def create(request):
        secreteid= User.objects.get(id=request.session['user_id'])

        Mysecret.objects.create( secret=request.POST['message'], creator=secreteid)

        return redirect( 'secretdojo:index')

    def removesecret(request, id):

        mainid = Mysecret.objects.get(id=id)
        userid =User.objects.get(id=request.session['user_id'])

        if mainid.creator != userid:
            return False
        mainid.delete()

        return redirect( 'secretdojo:index')

    def like(request, id):

        secreteid= User.objects.get(id=request.session['user_id'])
        mainid = Mysecret.objects.get(id=id)
        mainid.loguser.add(secreteid)

        return redirect( 'secretdojo:index')

    def topsecret(request):
        context = {


        }

        return redirect( '/')


    manage.py


    from __future__ import unicode_literals
    from django.db import models
    from ..logReg.models import User

    class Mysecret(models.Model):
        secret = models.CharField(max_length =500)
        created_at = models.DateTimeField(auto_now_add = True)
        updated_at = models.DateTimeField(auto_now = True)
        loguser = models.ManyToManyField(User, related_name='loguser')
        creator = models.ForeignKey(User, related_name='creator')

【问题讨论】:

    标签: python-2.7 django-models


    【解决方案1】:

    视图顶部的导入计数。是问题所在。

    【讨论】:

      猜你喜欢
      • 2015-08-22
      • 1970-01-01
      • 1970-01-01
      • 2014-08-19
      • 1970-01-01
      • 2014-09-20
      • 2015-09-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多