【问题标题】:Achievements in DjangoDjango 中的成就
【发布时间】:2021-08-21 14:58:23
【问题描述】:

我想将成就添加到我的网站。我希望它们不会被自动分配,但用户会添加他取得的成就。我无法看到它。

models.py


from django.db import models
from django.utils import timezone
from django.contrib.auth.models import User

# Create your models here.

class Achievement(models.Model):
    title = models.CharField(max_length=200, null=True)
    grand = models.IntegerField(default=10, null=True)
    body = models.TextField()

class UserAchievement(models.Model):
    user = models.ForeignKey(User, on_delete=models.DO_NOTHING)
    user_achievement = models.ManyToManyField(Achievement,  related_name='user_achievement')
    achievement_get = models.DateTimeField(auto_now_add=True)


vievs.py

def achievement_view(request):
    achievement_list = Achievement.objects.order_by()
    return render(request, 'achievement/achievement.html', {
            'achievement_list' : achievement_list,
            })


def achievement_get(request, achievement_id):
        achievement_list = get_object_or_404(Achievement, pk=achievement_id)
        achi = get_object_or_404(Achievement, pk=achievement_id)
        try:
            selected_choice = achievement_list.score_set.get(pk=request.POST['choice'])

        except (KeyError, Score.DoesNotExist):
            # Redisplay the question voting form.
                return render(request, 'achievement/adetail.html', {
                    'achievement_list': achievement_list,
                    'error_message': "You didn't select a choice.",
                    'thanks' : "Good",
                })
                

        else:
            a1 = get_object_or_404(Achievement, achievement_id)
            a1.save()
            a1.user_achievement.add(name=name)
            

            
            return render(request, 'achievement/adetail.html', {
                'achievement_list' : achievement_list,
                })

urls.py


app_name = 'achievement'  # przestrzeń nazw aplikacji
urlpatterns = [
 # ex: /polls/
    path('achievement', views.achievement_view, name='achievement'),
    path('<int:achievement_id>/achievement', views.achievement_get, name='achievement_get'),
    ]

成就.html

{% for achievement in achievement_list %}

    <li>{{ achievement.title }}</li>
    <li><fieldset><a href="/{{achievement_id}}/achievement/"> {{ achievement.title }} {{ achievement.grand }}</a></fieldset></li>

{% endfor %}

当我点击链接时, 不起作用。

【问题讨论】:

  • href="{% url 'achievement_get' achievement_id %}"
  • 来自站点的消息:NoReverseMatch 位于 /achievementachievement Reverse for 'achievement_get' 未找到。 'achievement_get' 不是有效的视图函数或模式名称。在其他地方,此链接有效:href="/{{achievement_id}}/achievement/"

标签: python django achievements


【解决方案1】:

在您的 html 模板中尝试:

href="{% url 'achievement_get' achievement_id %}" 

这会将成就 ID 传递给您 url 中的 int:achievement_id 并调用函数 views.achievement_get。

【讨论】:

  • 来自站点的消息:NoReverseMatch 位于 /achievementachievement Reverse for 'achievement_get' 未找到。 'achievement_get' 不是有效的视图函数或模式名称。在其他地方,此链接有效:href="/{{achievement_id}}/achievement/"
  • 应该是{% url 'achievement:achievement_get' achievement_id %},因为指定了app_name
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多