You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django项目中如何通过表单数据渲染指定文章页面?

解决方案

1. 调整视图逻辑(views.py)

同时处理搜索表单的GET(展示表单)和POST(处理搜索请求),并复用文章渲染逻辑:

from django.shortcuts import render

# 你的文章字典(示例)
articles = {
    "python": {"head": "Python入门指南", "text": "Python是一种高级编程语言,以简洁易读著称,广泛应用于数据分析、Web开发等领域..."},
    "django": {"head": "Django框架详解", "text": "Django是基于Python的全栈Web框架,遵循MVC设计模式,自带ORM、认证系统等实用工具..."}
}

def search(request):
    if request.method == "POST":
        # 获取并清洗用户输入的搜索词
        query = request.POST.get("query", "").strip().lower()
        # 匹配字典键
        if query in articles:
            return render(request, "article.html", {"article": articles[query]})
        # 无匹配时返回搜索页并提示
        return render(request, "search.html", {"error": "未找到对应文章"})
    # GET请求时展示搜索表单
    return render(request, "search.html", {"articles": articles})

# 保留原有的通过链接访问文章的逻辑(可选)
def article(request, article_key):
    article_key = article_key.lower()
    if article_key in articles:
        return render(request, "article.html", {"article": articles[article_key]})
    return render(request, "404.html")

2. 更新URL配置(urls.py)

添加搜索路由和文章详情路由:

from django.urls import path
from . import views

urlpatterns = [
    path("", views.search, name="search"),
    path("article/<str:article_key>/", views.article, name="article"),
]

3. 修改HTML模板

搜索页模板(search.html)

确保表单以POST方式提交,并添加CSRF令牌:

<!DOCTYPE html>
<html>
<head>
    <title>文章搜索</title>
</head>
<body>
    <h1>搜索文章</h1>
    {% if error %}
        <p style="color: red;">{{ error }}</p>
    {% endif %}
    <form method="POST" action="{% url 'search' %}">
        {% csrf_token %}
        <input type="text" name="query" placeholder="输入文章关键词..." required>
        <button type="submit">搜索</button>
    </form>

    <!-- 可选:展示所有文章链接,保留原有功能 -->
    <h2>所有文章</h2>
    <ul>
        {% for key, article in articles.items %}
            <li><a href="{% url 'article' key %}">{{ article.head }}</a></li>
        {% endfor %}
    </ul>
</body>
</html>

文章详情模板(article.html)

按需渲染文章内容:

<!DOCTYPE html>
<html>
<head>
    <title>{{ article.head }}</title>
</head>
<body>
    <h1>{{ article.head }}</h1>
    <p>{{ article.text }}</p>
    <a href="{% url 'search' %}">返回搜索页</a>
</body>
</html>

核心要点

  • 统一将搜索词转小写,避免大小写导致的匹配失败
  • 用POST提交表单,避免搜索词暴露在URL中,同时必须添加{% csrf_token %}防止跨站请求伪造
  • 复用文章渲染逻辑,不管是通过链接还是搜索提交,都动态渲染对应内容,无需创建静态页面
  • 处理无匹配的边界情况,给用户明确反馈

内容的提问来源于stack exchange,提问作者Vasee Aleem

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 00:03:34