【问题标题】:why my django slug is not working properly为什么我的 django slug 不能正常工作
【发布时间】:2020-09-19 15:16:57
【问题描述】:

我想允许用户在数据库中搜索主题。并在 url 中显示主题名称。 我已经在数据库中创建了 slug 字段,但是当我尝试从数据库中获取数据时,url 显示不正确。

网址显示:

http://127.0.0.1:8000/topic/<slug:topicname>/

我想展示的内容:

http://127.0.0.1:8000/topic/introduction-to-python/

我的 urls.py 文件

from django.urls 导入路径 从 。导入视图

urlpatterns = [
    path('', views.apphome),
    path('topic/<slug:topicname>/', views.searchtopic, name = 'searchtopic'),

]

我的项目模型

class blogposts(models.Model):
    topic = models.CharField(max_length = 200)
    slug = models.SlugField(max_length = 150, null=True, blank = True)
    post = models.TextField(max_length = 500)

    def __str__(self):
        return self.topic

这是我的看法

def searchtopic(request,topicname):
    if request.method == 'POST':
        topicname = request.POST.get('searchtopicname')

        mypost = mypostlist.objects.filter(slug = topicname)        
        context = {
            'mypost':mypost,
            }
        return render(request, 'blog/result.html',context)

我的主题搜索表单

<form action="topic/<slug:topicname>/" method="POST">
       {% csrf_token %}
       <input type="search" placeholder="Search topics or keywords" name="searchtopicname">
       <button type="submit">Search</button>
</form>

【问题讨论】:

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


    【解决方案1】:

    您可以使用“POST”的“GET”方法 将表单替换为:

    <form action="{%url 'searchtopic' %}" method="GET">
       {% csrf_token %}
       <input type="search" placeholder="Search topics or keywords" name="searchtopicname">
       <button type="submit">Search</button>
    </form>
    

    替换 urls.py:

    urlpatterns = [
    path('', views.apphome),
    path('topic/', views.searchtopic, name = 'searchtopic'),
    ]
    

    替换视图:

    def searchtopic(request):
    if request.method == 'GET':
        topicname = request.GET['searchtopicname']
    
        mypost = mypostlist.objects.filter(slug = topicname)        
        context = {
            'mypost':mypost,
            }
        return render(request, 'blog/result.html',context)
    

    【讨论】:

    • 显示 NoReverseMatch - 未找到参数的“searchtopic”反向。
    • @Prakash 你必须使用'POST'方法吗?
    • @Prakash 我改变了答案。
    • 现在显示 - searchtopic() 缺少 1 个必需的位置参数:'topicname' 我尝试在 url 中添加 slug,但它仍然无法正常工作
    • @Prakash 对不起,我更新了答案。请从 'searchtopic' 方法中删除 'topicname' 参数。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-06
    • 1970-01-01
    相关资源
    最近更新 更多