【问题标题】:how I'm gonna create the URL pattern for each topic?我将如何为每个主题创建 URL 模式?
【发布时间】: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 模式
  • 好的,我在下面写了一个完整的答案

标签: python html django forms 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”放在这个位置而不是“”

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-09-20
    • 1970-01-01
    • 1970-01-01
    • 2022-12-28
    • 2021-09-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多