如何在Django Url中发送id和slug?

2024-04-27 17:37:49 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图使django URL适合搜索引擎优化。我想在同一个url中发送Id和slug。我不想使用slug,我只想在url中显示。但我遇到了一个错误。我的模型如下所示:

class Oyunlar(models.Model):
    game_id = models.AutoField(primary_key=True)
    title = models.CharField(max_length=10000)
    platform = models.CharField(max_length=10)
    image = models.CharField(max_length=255, blank=True, null=True)
    release_date = models.DateField(blank=True, null=True)
    click_count = models.IntegerField()
    categories=models.ManyToManyField(Kategoriler,through='OyunlarKategoriler')
    base_price=models.DecimalField(default=0,max_digits=65535, decimal_places=2)
    big_discount=models.BooleanField(default=False)
    en_ucuz = models.DecimalField(default=0,max_digits=65535, decimal_places=2)
    popularite = models.IntegerField(blank=True, null=True,default=0)
    discount_rate = models.DecimalField(max_digits=65535, decimal_places=2)
    title_edit = models.CharField(max_length=500, blank=True, null=True)
    description = models.CharField(max_length=100000, blank=True, null=True)
    steam_id = models.CharField(max_length=1000, blank=True, null=True)
    metacritic = models.FloatField(blank=True, null=True)
    recommendation = models.BigIntegerField(blank=True, null=True)
    full_game = models.BooleanField(blank=True, null=True)
    age = models.CharField(max_length=500, blank=True, null=True)
    minimum = models.CharField(max_length=10000, blank=True, null=True)
    recommended = models.CharField(max_length=10000, blank=True, null=True)
    developer = models.CharField(max_length=500, blank=True, null=True)
    publisher = models.CharField(max_length=500, blank=True, null=True)
    oyun_foto = ArrayField(models.CharField(max_length=10000, blank=True, null=True)) # This field type is a guess.
    windows = models.BooleanField(blank=True, null=True)
    mac = models.BooleanField(blank=True, null=True)
    linux = models.BooleanField(blank=True, null=True)

    class Meta:
        managed = False
        db_table = 'oyunlar'

    def __str__(self):
        return self.title

url.py

path('<int:game_id>/<slug:slug>/',views.oyun,name='detail'),

视图.py

def oyun(request,slug,game_id):
    print(slug)
    oyun=Oyunlar.objects.get(pk=game_id)
    comments=Comments.objects.filter(oyunlar=oyun)
    game_price=GamePrice.objects.filter(game_id=game_id).order_by('price')
    categories = OyunlarKategoriler.objects.filter(game=oyun).values_list('category_id', flat=True)
    benzer = Oyunlar.objects.filter(categories__category_id__in=categories, platform=oyun.platform).order_by('-click_count').distinct()[:4]
    print(request.method)
    if request.method == 'POST':
        cf = CommentForm(request.POST or None)
        print('burda')
        if cf.is_valid():
            print('valid')
            text = request.POST.get('text')
            comment = Comments.objects.create(oyunlar=oyun, user=request.user, text=text)
            comment.save()
            return redirect(oyun.get_absolute_url())
    else:
        cf = CommentForm()


    return render(request,'product-simple.html',{'oyun':oyun,'game_price':game_price,'benzer':benzer,'comment_form':cf,'comments':comments})

助手标签

@register.filter
def slug(value):
    return slugify(unidecode(value))

html

<a href="{% url 'detail' i.game_id i.title|slug %}"

但我得到了一个错误:

错误

Reverse for 'detail' with arguments '(32147,)' not found. 1 pattern(s) tried: ['(?P<game_id>[0-9]+)/(?P<slug>[-a-zA-Z0-9_]+)/$']

Tags: idgametrueurlobjectsmodelsrequestnull