prompt: We are currently solving the following issue within our repository. Here is the issue text:
  --- BEGIN ISSUE ---
  Improve explanation for page slugs
  Users did not understand what the page slug means. We should provide a help text, either directly or in the docs.
  
  --- END ISSUE ---
  
  Below are some code segments, each from a relevant file. One or more of these files may contain bugs.
  --- BEGIN FILES ---
  Path: `ephios/plugins/pages/models.py`
  Content:
  ```
  1 from django.db import models
  2 from django.utils.translation import gettext_lazy as _
  3 
  4 
  5 class Page(models.Model):
  6     title = models.CharField(verbose_name=_("Title"), max_length=250)
  7     content = models.TextField(_("Content"), blank=True)
  8     slug = models.SlugField(_("Slug"), max_length=250, unique=True)
  9     show_in_footer = models.BooleanField(_("Show in footer"), default=False)
  10     publicly_visible = models.BooleanField(_("Publicly visible"), default=False)
  11 
  12     def __str__(self):
  13         return str(self.title)
  14 
  15     class Meta:
  16         verbose_name = "Page"
  17         verbose_name_plural = "Pages"
  18
  ```
  
  Path: `ephios/plugins/pages/views.py`
  Content:
  ```
  1 from django.contrib import messages
  2 from django.contrib.auth.views import redirect_to_login
  3 from django.urls import reverse
  4 from django.utils.translation import gettext as _
  5 from django.views.generic import CreateView, DeleteView, DetailView, ListView, UpdateView
  6 
  7 from ephios.extra.mixins import CustomPermissionRequiredMixin
  8 from ephios.plugins.pages.models import Page
  9 
  10 
  11 class PageListView(CustomPermissionRequiredMixin, ListView):
  12     model = Page
  13     permission_required = "pages.add_page"
  14 
  15 
  16 class PageView(DetailView):
  17     model = Page
  18 
  19     def setup(self, request, *args, **kwargs):
  20         super().setup(request, *args, **kwargs)
  21         self.object = self.get_object()
  22 
  23     def dispatch(self, request, *args, **kwargs):
  24         if not request.user.is_authenticated and not self.object.publicly_visible:
  25             return redirect_to_login(self.request.get_full_path())
  26         return super().dispatch(request, *args, **kwargs)
  27 
  28 
  29 class PageCreateView(CustomPermissionRequiredMixin, CreateView):
  30     model = Page
  31     permission_required = "pages.add_page"
  32     fields = ["title", "content", "slug", "show_in_footer", "publicly_visible"]
  33 
  34     def get_success_url(self):
  35         messages.success(self.request, _("Page saved successfully."))
  36         return reverse("pages:settings_page_list")
  37 
  38 
  39 class PageUpdateView(CustomPermissionRequiredMixin, UpdateView):
  40     model = Page
  41     permission_required = "pages.change_page"
  42     fields = ["title", "content", "slug", "show_in_footer", "publicly_visible"]
  43 
  44     def get_success_url(self):
  45         messages.success(self.request, _("Page saved successfully."))
  46         return reverse("pages:settings_page_list")
  47 
  48 
  49 class PageDeleteView(CustomPermissionRequiredMixin, DeleteView):
  50     model = Page
  51     permission_required = "pages.delete_page"
  52 
  53     def get_success_url(self):
  54         messages.info(self.request, _("Page deleted successfully."))
  55         return reverse("pages:settings_page_list")
  56
  ```
  --- END FILES ---
  
  Please first localize the bug based on the issue statement, and then generate a patch according to the `git diff` format fenced by three backticks.
  
  Here is an example:
  
  ```diff
  diff --git a/examples/server_async.py b/examples/server_async.py
  --- a/examples/server_async.py
  +++ b/examples/server_async.py
  @@ -313,4 +313,4 @@
   
   
   if __name__ == "__main__":
  -    asyncio.run(run_async_server("."), debug=True)
  +    asyncio.run(run_async_server(), debug=True)
  diff --git a/examples/server_sync.py b/examples/server_sync.py
  --- a/examples/server_sync.py
  +++ b/examples/server_sync.py
  @@ -313,5 +313,5 @@
   
   
   if __name__ == "__main__":
  -    server = run_sync_server(".")
  +    server = run_sync_server()
       server.shutdown()
  
  ```
  
golden_diff: diff --git a/ephios/plugins/pages/models.py b/ephios/plugins/pages/models.py
  --- a/ephios/plugins/pages/models.py
  +++ b/ephios/plugins/pages/models.py
  @@ -5,7 +5,12 @@
   class Page(models.Model):
       title = models.CharField(verbose_name=_("Title"), max_length=250)
       content = models.TextField(_("Content"), blank=True)
  -    slug = models.SlugField(_("Slug"), max_length=250, unique=True)
  +    slug = models.SlugField(
  +        _("URL slug"),
  +        help_text=_("The slug is used to generate the page's URL."),
  +        max_length=250,
  +        unique=True,
  +    )
       show_in_footer = models.BooleanField(_("Show in footer"), default=False)
       publicly_visible = models.BooleanField(_("Publicly visible"), default=False)
   
  diff --git a/ephios/plugins/pages/views.py b/ephios/plugins/pages/views.py
  --- a/ephios/plugins/pages/views.py
  +++ b/ephios/plugins/pages/views.py
  @@ -29,7 +29,7 @@
   class PageCreateView(CustomPermissionRequiredMixin, CreateView):
       model = Page
       permission_required = "pages.add_page"
  -    fields = ["title", "content", "slug", "show_in_footer", "publicly_visible"]
  +    fields = ["title", "slug", "content", "show_in_footer", "publicly_visible"]
   
       def get_success_url(self):
           messages.success(self.request, _("Page saved successfully."))
  @@ -39,7 +39,7 @@
   class PageUpdateView(CustomPermissionRequiredMixin, UpdateView):
       model = Page
       permission_required = "pages.change_page"
  -    fields = ["title", "content", "slug", "show_in_footer", "publicly_visible"]
  +    fields = ["title", "slug", "content", "show_in_footer", "publicly_visible"]
   
       def get_success_url(self):
           messages.success(self.request, _("Page saved successfully."))
  
verification_info: {"golden_diff": "diff --git a/ephios/plugins/pages/models.py b/ephios/plugins/pages/models.py\n--- a/ephios/plugins/pages/models.py\n+++ b/ephios/plugins/pages/models.py\n@@ -5,7 +5,12 @@\n class Page(models.Model):\n     title = models.CharField(verbose_name=_(\"Title\"), max_length=250)\n     content = models.TextField(_(\"Content\"), blank=True)\n-    slug = models.SlugField(_(\"Slug\"), max_length=250, unique=True)\n+    slug = models.SlugField(\n+        _(\"URL slug\"),\n+        help_text=_(\"The slug is used to generate the page's URL.\"),\n+        max_length=250,\n+        unique=True,\n+    )\n     show_in_footer = models.BooleanField(_(\"Show in footer\"), default=False)\n     publicly_visible = models.BooleanField(_(\"Publicly visible\"), default=False)\n \ndiff --git a/ephios/plugins/pages/views.py b/ephios/plugins/pages/views.py\n--- a/ephios/plugins/pages/views.py\n+++ b/ephios/plugins/pages/views.py\n@@ -29,7 +29,7 @@\n class PageCreateView(CustomPermissionRequiredMixin, CreateView):\n     model = Page\n     permission_required = \"pages.add_page\"\n-    fields = [\"title\", \"content\", \"slug\", \"show_in_footer\", \"publicly_visible\"]\n+    fields = [\"title\", \"slug\", \"content\", \"show_in_footer\", \"publicly_visible\"]\n \n     def get_success_url(self):\n         messages.success(self.request, _(\"Page saved successfully.\"))\n@@ -39,7 +39,7 @@\n class PageUpdateView(CustomPermissionRequiredMixin, UpdateView):\n     model = Page\n     permission_required = \"pages.change_page\"\n-    fields = [\"title\", \"content\", \"slug\", \"show_in_footer\", \"publicly_visible\"]\n+    fields = [\"title\", \"slug\", \"content\", \"show_in_footer\", \"publicly_visible\"]\n \n     def get_success_url(self):\n         messages.success(self.request, _(\"Page saved successfully.\"))\n", "issue": "Improve explanation for page slugs\nUsers did not understand what the page slug means. We should provide a help text, either directly or in the docs.\n", "before_files": [{"content": "from django.db import models\nfrom django.utils.translation import gettext_lazy as _\n\n\nclass Page(models.Model):\n    title = models.CharField(verbose_name=_(\"Title\"), max_length=250)\n    content = models.TextField(_(\"Content\"), blank=True)\n    slug = models.SlugField(_(\"Slug\"), max_length=250, unique=True)\n    show_in_footer = models.BooleanField(_(\"Show in footer\"), default=False)\n    publicly_visible = models.BooleanField(_(\"Publicly visible\"), default=False)\n\n    def __str__(self):\n        return str(self.title)\n\n    class Meta:\n        verbose_name = \"Page\"\n        verbose_name_plural = \"Pages\"\n", "path": "ephios/plugins/pages/models.py"}, {"content": "from django.contrib import messages\nfrom django.contrib.auth.views import redirect_to_login\nfrom django.urls import reverse\nfrom django.utils.translation import gettext as _\nfrom django.views.generic import CreateView, DeleteView, DetailView, ListView, UpdateView\n\nfrom ephios.extra.mixins import CustomPermissionRequiredMixin\nfrom ephios.plugins.pages.models import Page\n\n\nclass PageListView(CustomPermissionRequiredMixin, ListView):\n    model = Page\n    permission_required = \"pages.add_page\"\n\n\nclass PageView(DetailView):\n    model = Page\n\n    def setup(self, request, *args, **kwargs):\n        super().setup(request, *args, **kwargs)\n        self.object = self.get_object()\n\n    def dispatch(self, request, *args, **kwargs):\n        if not request.user.is_authenticated and not self.object.publicly_visible:\n            return redirect_to_login(self.request.get_full_path())\n        return super().dispatch(request, *args, **kwargs)\n\n\nclass PageCreateView(CustomPermissionRequiredMixin, CreateView):\n    model = Page\n    permission_required = \"pages.add_page\"\n    fields = [\"title\", \"content\", \"slug\", \"show_in_footer\", \"publicly_visible\"]\n\n    def get_success_url(self):\n        messages.success(self.request, _(\"Page saved successfully.\"))\n        return reverse(\"pages:settings_page_list\")\n\n\nclass PageUpdateView(CustomPermissionRequiredMixin, UpdateView):\n    model = Page\n    permission_required = \"pages.change_page\"\n    fields = [\"title\", \"content\", \"slug\", \"show_in_footer\", \"publicly_visible\"]\n\n    def get_success_url(self):\n        messages.success(self.request, _(\"Page saved successfully.\"))\n        return reverse(\"pages:settings_page_list\")\n\n\nclass PageDeleteView(CustomPermissionRequiredMixin, DeleteView):\n    model = Page\n    permission_required = \"pages.delete_page\"\n\n    def get_success_url(self):\n        messages.info(self.request, _(\"Page deleted successfully.\"))\n        return reverse(\"pages:settings_page_list\")\n", "path": "ephios/plugins/pages/views.py"}], "after_files": [{"content": "from django.db import models\nfrom django.utils.translation import gettext_lazy as _\n\n\nclass Page(models.Model):\n    title = models.CharField(verbose_name=_(\"Title\"), max_length=250)\n    content = models.TextField(_(\"Content\"), blank=True)\n    slug = models.SlugField(\n        _(\"URL slug\"),\n        help_text=_(\"The slug is used to generate the page's URL.\"),\n        max_length=250,\n        unique=True,\n    )\n    show_in_footer = models.BooleanField(_(\"Show in footer\"), default=False)\n    publicly_visible = models.BooleanField(_(\"Publicly visible\"), default=False)\n\n    def __str__(self):\n        return str(self.title)\n\n    class Meta:\n        verbose_name = \"Page\"\n        verbose_name_plural = \"Pages\"\n", "path": "ephios/plugins/pages/models.py"}, {"content": "from django.contrib import messages\nfrom django.contrib.auth.views import redirect_to_login\nfrom django.urls import reverse\nfrom django.utils.translation import gettext as _\nfrom django.views.generic import CreateView, DeleteView, DetailView, ListView, UpdateView\n\nfrom ephios.extra.mixins import CustomPermissionRequiredMixin\nfrom ephios.plugins.pages.models import Page\n\n\nclass PageListView(CustomPermissionRequiredMixin, ListView):\n    model = Page\n    permission_required = \"pages.add_page\"\n\n\nclass PageView(DetailView):\n    model = Page\n\n    def setup(self, request, *args, **kwargs):\n        super().setup(request, *args, **kwargs)\n        self.object = self.get_object()\n\n    def dispatch(self, request, *args, **kwargs):\n        if not request.user.is_authenticated and not self.object.publicly_visible:\n            return redirect_to_login(self.request.get_full_path())\n        return super().dispatch(request, *args, **kwargs)\n\n\nclass PageCreateView(CustomPermissionRequiredMixin, CreateView):\n    model = Page\n    permission_required = \"pages.add_page\"\n    fields = [\"title\", \"slug\", \"content\", \"show_in_footer\", \"publicly_visible\"]\n\n    def get_success_url(self):\n        messages.success(self.request, _(\"Page saved successfully.\"))\n        return reverse(\"pages:settings_page_list\")\n\n\nclass PageUpdateView(CustomPermissionRequiredMixin, UpdateView):\n    model = Page\n    permission_required = \"pages.change_page\"\n    fields = [\"title\", \"slug\", \"content\", \"show_in_footer\", \"publicly_visible\"]\n\n    def get_success_url(self):\n        messages.success(self.request, _(\"Page saved successfully.\"))\n        return reverse(\"pages:settings_page_list\")\n\n\nclass PageDeleteView(CustomPermissionRequiredMixin, DeleteView):\n    model = Page\n    permission_required = \"pages.delete_page\"\n\n    def get_success_url(self):\n        messages.info(self.request, _(\"Page deleted successfully.\"))\n        return reverse(\"pages:settings_page_list\")\n", "path": "ephios/plugins/pages/views.py"}]}