我将如何为每个主题创建 URL 模式?

Posted

技术标签:

【中文标题】我将如何为每个主题创建 URL 模式?【英文标题】:how I'm gonna create the URL pattern for each topic? 【发布时间】:2022-01-18 21:06:34 【问题描述】:

我想为每个主题创建一个 URL 模式。我要怎么做?? 这是我的代码:

models.py

from django.db import models

from django.db import models


class Task(models.Model):
    title = models.CharField(max_length=50)
    completed = models.BooleanField(default=False)
    created = models.DateTimeField(auto_now_add=True)

def __str__(self):
    return self.title

urls.py

from django.urls import path
from . import views

app_name = 'my_app'

urlpatterns = [
    path('', views.index, name='index'),
    path('add_task/', views.add_task, name='add_task'),
]

forms.py 从 django 导入表格 从 .models 导入任务

    class TaskForm(forms.ModelForm):
        title = forms.CharField(widget=forms.TextInput(attrs='placeholder': 'add new 
        task...'))

        class Meta:
            model = Task
            fields = '__all__'

views.py

from django.shortcuts import render, redirect
from django.http import HttpResponse
from .models import Task
from .forms import TaskForm


def index(request):
    task = Task.objects.all()
    context = 'task': task
    return render(request, 'my_app/index.html', context)


def add_task(request):
    if request.method == 'GET':
        form = TaskForm()
    else:
        form = TaskForm(data=request.POST)
        if form.is_valid():
        form.save()
    return redirect('my_app:index')
    context = 'form': form
    return render(request, 'my_app/add_task.html', context)

base.html

待办事项

    % block content %% endblock %

index.html % 扩展 'my_app/base.html' %

    % block content %
    <p><a href="% url 'my_app:add_task' %">Add task</a></p>
    <ul>
        % for tasks in task %
        <li>
             tasks 
        </li>

        % empty %
        <li>
            <p>There's no task</p>
        </li>
        % endfor %
    </ul>
    % endblock %

add_task.html % 扩展 'my_app/base.html' %

    % block content %
    <p><a href="% url 'my_app:index' %">Index</a></p>
    <p>Add task</p>
    <a href="% url 'my_app:task' task.id%"> tasks </a>
    <form action="% url 'my_app:add_task' %" method="post">
        % csrf_token %
         form.title 
        <button type="submit">Add task</button>

    </form>
    % endblock %

所以我想创建一个待办事项应用程序。我创建了一个表单,但知道我想为每个主题创建 URL 模式。我该怎么做??

【问题讨论】:

您想为每个创建的任务创建一个 URL 模式吗? 是的,我想为创建的每个任务创建 URL 模式 好的,我在下面写了一个完整的答案 【参考方案1】:

为数据库中的每个任务添加 URL 的最简单方法是在 url 中使用 &lt;pk&gt;。 Django 允许您在 url 中传递可以在视图中获取的项目。这是你可以做的: 在网址中:

urlpatterns = [
    path('', views.index, name='index'),
    path('add_task/', views.add_task, name='add_task'),
    path('task-details/<pk>', views.task_detail_view, name='task_detail'),
]

那么在你看来,你可以让 pk 这样做:

def task_detail_view(request, **kwargs):
    task_pk = kwargs.get('pk')
    task = Task.objects.get(pk=task_pk)
    # Perform more logic and render html page...

如果你想在另一个 html 页面中创建一个指向这个页面的链接,你可以这样做:

<a href="% url 'my_app:task_detail' <pk> %">link</a>

&lt;pk&gt; 将是一个整数,表示您要链接到的任务的 pk。在您的“index.html”中,您可能希望将“tasks.pk”放在这个位置而不是“”

【讨论】:

以上是关于我将如何为每个主题创建 URL 模式?的主要内容,如果未能解决你的问题,请参考以下文章

我将如何为 R 语法编写等效的 Python 语法

我将如何为读写操作实现单独的数据库?

我将如何为多个十字架设置警报?

Spring Security - OAuth2 和 CustomAuthenticationProvider。如何为每个配置不同的 URL 模式?

如何给每个进程一个特定的数组以开始

如何为临床数据集确定数据仓库模式?