【问题标题】:Getting a NoReverseMatch error Django when creating url link in template在模板中创建 url 链接时出现 NoReverseMatch 错误 Django
【发布时间】:2021-07-07 11:54:07
【问题描述】:

不知道为什么我会收到这个错误,我检查了我的视图和路径,我认为这看起来不错,我得到的 noreversematch 错误显示参数('wonderful','bass',1)'是正确的,但它会抛出此错误:

NoReverseMatch 在 /instrument-detail/wonderful/1/ 未找到带有参数 '('wonderful', 'bass', 1)' 的 'create_eq' 的反向操作。尝试了 1 种模式:['create\-eq/(?P[-a-zA-Z0-9_]+)/(?P[-a-zA-Z0-9_]+ )/int:id>/$']

这是我的视图、url、模型和模板,其中我有指向“create_eq”的链接:

urls.py

path('create-eq/<slug:track_slug>/<slug:instrument_slug>/int:id>/', views.create_eq, name='create_eq'),
path('instrument-detail/<slug:track_slug>/<int:id>/', views.instrument_detail, name='instrument_detail'),

views.py

@login_required
def create_eq(request, track_slug, instrument_slug, id):
    user = request.user
    track = get_object_or_404(Track, id=id)
    instrument = get_object_or_404(Instrument, id=id)
    if request.method == "POST":
        form = EQCreateForm(request.POST)
        if form.is_valid():
            data = form.save(commit=False)
            data.user = user
            data.save()
            return redirect('profile', slug=track.slug, id=track.id)
    else:
        form = EQCreateForm()
    return render(request, 'feed/create_eq.html', {'form': form })



@login_required
def instrument_detail(request, track_slug, id):
    user = request.user
    track = get_object_or_404(Track, id=id)
    my_inst = Instrument.objects.filter(track_id=track.id)
    instrument_obj = get_object_or_404(Instrument, id=id)
    if my_inst.exists():
        instruments = Instrument.objects.filter(track_id=track.id)
        context = {
            'instruments': instruments,
            'track': track,
            'instrument': instrument_obj,
        }
        return render(request, 'feed/instrument_detail.html', context)
    else:
        print('There are no instruments set in your track')
        return redirect('create_instrument', track_slug=track.slug, id=track.id)

models.py

class Instrument(models.Model):
    title     = models.CharField(max_length=120)
    timestamp = models.DateTimeField(auto_now_add=True)
    updated   = models.DateTimeField(auto_now=True)
    track     = models.ForeignKey('Track', on_delete=models.CASCADE, null=True)
    artist    = models.ForeignKey(User, on_delete=models.CASCADE, null=True)
    slug      = models.SlugField(null=True, unique=True)

    def __str__(self):
        return 'title:{} track:{} artist:{}'.format(self.title, self.track, self.artist)


    def save(self, *args, **kwargs):
        if not self.slug:
            self.slug = slugify(self.title)
        return super(Instrument, self).save(*args, **kwargs)


class EQ(models.Model):
    frequency   = models.DecimalField(decimal_places=3, max_digits=20)
    description = models.TextField(max_length=250, null=True, blank=True) 
    boost       = models.DecimalField(decimal_places=2, max_digits=10, default=0)
    cut         = models.DecimalField(decimal_places=2, max_digits=10, default=0)
    updated     = models.DateTimeField(auto_now=True)
    instrument  = models.ForeignKey(Instrument,on_delete=models.CASCADE)
    track       = models.ForeignKey('Track', on_delete=models.CASCADE)
    user_name   = models.ForeignKey(User, on_delete=models.CASCADE)


    def __str__(self):
        return 'frequency:{} instrument:{} track:{} boost:{} cut:{} user_name:{} description:{}'.format(self.frequency, self.instrument, self.track, self.boost, self.cut, self.user_name, self.description)


class Track(models.Model):
    title       = models.CharField(max_length=100)
    description = models.TextField(max_length=250, null=True, blank=True)
    artist      = models.CharField(max_length=250)
    timestamp   = models.DateTimeField(auto_now_add=True)
    updated     = models.DateTimeField(auto_now=True)
    user        = models.ForeignKey(User, on_delete=models.CASCADE)
    slug        = models.SlugField(null=True, unique=True)

instrument_detail.html

{% 用于仪器中的项目 %}
    <div class="col">
        <div class="card one-track">
            <a href="{% url 'create_eq' track.slug instrument.slug track.id %}"><h5>{{ items.title }}</h5></a>
        </div>
    </div>

{% endfor %}

【问题讨论】:

    标签: django django-models django-views django-templates


    【解决方案1】:

    您有一个拼写错误,您忘记了 URL 路径中的 &lt;
    这是&lt;int:id&gt; 不是int:id&gt;

    path('create-eq/<slug:track_slug>/<slug:instrument_slug>/<int:id>/', views.create_eq, name='create_eq'),
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-07-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-08
      相关资源
      最近更新 更多